Таблицы T1 и T2 находятся в одной базе.
select * from T1 where T1.F1 in (select T2.ID from T2 where T2.ID = 100)
Вопрос - есть ли хоть одна база данных на которой этот синтаксис не поддеживается или не понимается ?
sql вопрос
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- dima
- Житель
- Сообщения: 690
- Зарегистрирован: 19 фев 2003, 19:26
- Откуда: Хабаровск->Toronto
- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
- sz
- Маньяк
- Сообщения: 1266
- Зарегистрирован: 17 фев 2003, 19:34
- Earl Grey
- Маньяк
- Сообщения: 2893
- Зарегистрирован: 22 фев 2005, 15:07
думаю dima просто "сэкономил чернила" когда писал условие.Старина Зотин писал(а):А зачем так сложно-то?
select * from T1 where T1.F1 = 100;
абсолютно эквивалентно, при условии, конечно, что F1 действительно внешний ключ (то есть если существует T1.F1 с некоторым значением, то обязательно найдется T2.ID с таким же)

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

- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
-
- Маньяк
- Сообщения: 2841
- Зарегистрирован: 20 фев 2003, 09:15
- Откуда: Vancouver
Re: sql вопрос
Исходя из общей теории относительности - найдется. Пиши в ANSY-92 entry level. Идешь в Гугл и печатаешь что то типа 'ANSY SQL validator'. Попадаешь на веб сайт где мона ввести сикуел и проверить его на вшивость - типа на соответствие стандарта. Очень важно помнить что когда всякие базы усиленно рекламирует как ANSY compatible - есть очень много этих ANSY и еще есть уровни этого ANSY так что это лоходром тот еще. Так что ко всякому собтственному сикуелу надо дисклэймер прицеплять - типа соответствует такому то стандарту такому то уровню протестировано с такой то базой релиз нумер на такой то ОС релиз нумер с таким то клиентом релиз нумер ну и так далее. Мелким шрифтом вверх ногами в самом конце с кучей звездочек.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
Re: sql вопрос
ANSIVovchik писал(а):ANSY-92 entry level.

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

-
- Пользователь
- Сообщения: 194
- Зарегистрирован: 19 май 2006, 21:03
- Откуда: + 1 604
Работать аналогичная структура будет во всех SQL2 базах,
но по-разному будет оптимизирована.
Например в Oracle и DB2 сработает не хуже чем с join, а в MSSQL и Interbase/Firebird на больших таблицах будет притормаживать. Лучше стараться использовать join или exists, в любом случае прикидывать, сколько значений вернет запрос в "in" блоке - в некоторых базах есть ограничения.
MySQL не относится к SQL2.
но по-разному будет оптимизирована.
Например в Oracle и DB2 сработает не хуже чем с join, а в MSSQL и Interbase/Firebird на больших таблицах будет притормаживать. Лучше стараться использовать join или exists, в любом случае прикидывать, сколько значений вернет запрос в "in" блоке - в некоторых базах есть ограничения.
MySQL не относится к SQL2.