Страница 1 из 1
sql вопрос
Добавлено: 16 май 2006, 12:34
dima
Таблицы T1 и T2 находятся в одной базе.
select * from T1 where T1.F1 in (select T2.ID from T2 where T2.ID = 100)
Вопрос - есть ли хоть одна база данных на которой этот синтаксис не поддеживается или не понимается ?
Добавлено: 16 май 2006, 13:14
папа Карло
напиши тоже самое через анси джойн... с вероятностью 99% будет работать везде.

Добавлено: 16 май 2006, 15:23
sz
А зачем так сложно-то?
select * from T1 where T1.F1 = 100;
абсолютно эквивалентно, при условии, конечно, что F1 действительно внешний ключ (то есть если существует T1.F1 с некоторым значением, то обязательно найдется T2.ID с таким же)
Добавлено: 16 май 2006, 16:19
Earl Grey
Старина Зотин писал(а):А зачем так сложно-то?
select * from T1 where T1.F1 = 100;
абсолютно эквивалентно, при условии, конечно, что F1 действительно внешний ключ (то есть если существует T1.F1 с некоторым значением, то обязательно найдется T2.ID с таким же)
думаю dima просто "сэкономил чернила" когда писал условие.

Мне тоже эта "сотка" в глаза бросилась, но я подумал что вопрос вообще о применимости in (select ...).
Но если ты прав, то ...

Добавлено: 16 май 2006, 16:20
Marmot
Re: sql вопрос
Добавлено: 17 май 2006, 08:37
Vovchik
dima писал(а):Таблицы T1 и T2 находятся в одной базе.
select * from T1 where T1.F1 in (select T2.ID from T2 where T2.ID = 100)
Вопрос - есть ли хоть одна база данных на которой этот синтаксис не поддеживается или не понимается ?
Исходя из общей теории относительности - найдется. Пиши в ANSY-92 entry level. Идешь в Гугл и печатаешь что то типа 'ANSY SQL validator'. Попадаешь на веб сайт где мона ввести сикуел и проверить его на вшивость - типа на соответствие стандарта. Очень важно помнить что когда всякие базы усиленно рекламирует как ANSY compatible - есть очень много этих ANSY и еще есть уровни этого ANSY так что это лоходром тот еще. Так что ко всякому собтственному сикуелу надо дисклэймер прицеплять - типа соответствует такому то стандарту такому то уровню протестировано с такой то базой релиз нумер на такой то ОС релиз нумер с таким то клиентом релиз нумер ну и так далее. Мелким шрифтом вверх ногами в самом конце с кучей звездочек.
Re: sql вопрос
Добавлено: 18 май 2006, 13:10
папа Карло
Vovchik писал(а):ANSY-92 entry level.
ANSI

Re: sql вопрос
Добавлено: 18 май 2006, 16:58
vg
папа Карло писал(а):Vovchik писал(а):ANSY-92 entry level.
ANSI

ANSI SQL liquidator

Добавлено: 24 май 2006, 13:00
bormo
Работать аналогичная структура будет во всех SQL2 базах,
но по-разному будет оптимизирована.
Например в Oracle и DB2 сработает не хуже чем с join, а в MSSQL и Interbase/Firebird на больших таблицах будет притормаживать. Лучше стараться использовать join или exists, в любом случае прикидывать, сколько значений вернет запрос в "in" блоке - в некоторых базах есть ограничения.
MySQL не относится к SQL2.