Использование одной и той же таблицы во внешнем и вложенном подзапросе

Выдать номера поставщиков, которые поставляют хотя бы один продукт, поставляемый поставщиком 6.

SELECT DISTINCT ПС FROM Поставки WHERE ПР IN (SELECT ПР FROM Поставки WHERE ПС = 6);

Результат:

ПС
 
 
 
 
 

Отметим, что ссылка на Поставки во вложенном подзапросе означает не то же самое, что ссылка на Поставки во внешнем запросе. В действительности, два имени Поставки обозначают различные значения. Чтобы этот факт стал явным, полезно использовать псевдонимы, например, X и Y:

SELECT DISTINCT X.ПС FROM Поставки X WHERE X.ПР IN (SELECT Y.ПР FROM Поставки Y WHERE Y.ПС = 6);

Здесь X и Y – произвольные псевдонимы таблицы Поставки, определяемые во фразе FROM и используемые как явные уточнители во фразах SELECT и WHERE. Напомним, что псевдонимы определены лишь в пределах одного запроса.

Вложенный подзапрос с оператором сравнения, отличным от IN.

Выдать номера поставщиков, находящихся в том же городе, что и поставщик с номером 6.

SELECT ПС FROM Поставщики WHERE Город = (SELECT Город FROM Поставщики WHERE ПС = 6);

Результат:

ПС
 
 
 

В подобных запросах можно использовать и другие операторы сравнения (<>, <=, <, >= или >), однако, если вложенный подзапрос возвращает более одного значения и не используется оператор IN, будет возникать ошибка.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: