sql вопрос

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
Аватара пользователя
dima
Житель
Сообщения: 690
Зарегистрирован: 19 фев 2003, 19:26
Откуда: Хабаровск->Toronto

sql вопрос

Сообщение dima »

Таблицы T1 и T2 находятся в одной базе.

select * from T1 where T1.F1 in (select T2.ID from T2 where T2.ID = 100)

Вопрос - есть ли хоть одна база данных на которой этот синтаксис не поддеживается или не понимается ?
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

напиши тоже самое через анси джойн... с вероятностью 99% будет работать везде. :)
Аватара пользователя
sz
Маньяк
Сообщения: 1266
Зарегистрирован: 17 фев 2003, 19:34

Сообщение sz »

А зачем так сложно-то?

select * from T1 where T1.F1 = 100;

абсолютно эквивалентно, при условии, конечно, что F1 действительно внешний ключ (то есть если существует T1.F1 с некоторым значением, то обязательно найдется T2.ID с таким же)
Аватара пользователя
Earl Grey
Маньяк
Сообщения: 2893
Зарегистрирован: 22 фев 2005, 15:07

Сообщение Earl Grey »

Старина Зотин писал(а):А зачем так сложно-то?

select * from T1 where T1.F1 = 100;

абсолютно эквивалентно, при условии, конечно, что F1 действительно внешний ключ (то есть если существует T1.F1 с некоторым значением, то обязательно найдется T2.ID с таким же)
думаю dima просто "сэкономил чернила" когда писал условие. :)
Мне тоже эта "сотка" в глаза бросилась, но я подумал что вопрос вообще о применимости in (select ...).

Но если ты прав, то ... :)
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

Vovchik
Маньяк
Сообщения: 2841
Зарегистрирован: 20 фев 2003, 09:15
Откуда: Vancouver

Re: sql вопрос

Сообщение 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 так что это лоходром тот еще. Так что ко всякому собтственному сикуелу надо дисклэймер прицеплять - типа соответствует такому то стандарту такому то уровню протестировано с такой то базой релиз нумер на такой то ОС релиз нумер с таким то клиентом релиз нумер ну и так далее. Мелким шрифтом вверх ногами в самом конце с кучей звездочек.
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Re: sql вопрос

Сообщение папа Карло »

Vovchik писал(а):ANSY-92 entry level.
ANSI ;)
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Re: sql вопрос

Сообщение vg »

папа Карло писал(а):
Vovchik писал(а):ANSY-92 entry level.
ANSI ;)
ANSI SQL liquidator :wink:
bormo
Пользователь
Сообщения: 194
Зарегистрирован: 19 май 2006, 21:03
Откуда: + 1 604

Сообщение bormo »

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

MySQL не относится к SQL2.
Ответить