В SQL мы всегда можем написать внутренний оператор соединения в качестве основного запроса и подзапроса? - PullRequest
1 голос
/ 25 апреля 2010

В SQL, мы всегда можем написать внутренний оператор соединения в качестве основного запроса и подзапроса?

Например,

 select * from gifts g where g.giftID in (select giftID from sentGifts);

может выполнить объединение и показать подарки, отправленные в таблице sentGifts, но не сможет показать sentTime, потому что это находится внутри подзапроса?

Ответы [ 2 ]

4 голосов
/ 25 апреля 2010

Нет, вы можете использовать это, только если условие является единственным значением.

Вы не можете сделать это с запросом, подобным:

select *
from gifts g
inner join sentGifts s on s.giftType = g.giftType and s.giftDate = g.giftDate
3 голосов
/ 25 апреля 2010

Нет, вы не можете переписать все ВНУТРЕННИЕ СОЕДИНЕНИЯ.

Иногда ваше внутреннее условие соединения будет включать более одного столбца, и тогда IN не обязательно будет работать.

Кроме того, иногда внутренним условием соединения будет диапазон или более сложное выражение, в котором этот метод запроса / подзапроса не будет работать вообще, например: поиск перекрывающихся интервалов.

...