Страница 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 :wink:

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

MySQL не относится к SQL2.