18c0693f

СЛУЧАЙ ИСПОЛЬЗОВАНИЯ ОДНОЙ И ТОЙ ЖЕ ТАБЛИЦЫ В ПОДЗАПРОСЕ И ВНЕШНЕМ ЗАПРОСЕ


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

SELECT                DISTINCT НОМЕР_ПОСТАВЩИКА

FROM                   SP

WHERE                НОМЕР_ДЕТАЛИ IN

(SELECT                     НОМЕР_ДЕТАЛИ

FROM                          SP

WHERE                       НОМЕР_ПОСТАВЩИКА = 'S2');

Результат:

НОМЕР_ПОСТАВЩИКА

S1

S2

S3

S4

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

SELECT                DISTINCT SPX. НОМЕР_ПОСТАВЩИКА

FROM                   SP SPX

WHERE                SPX. НОМЕР_ДЕТАЛИ IN

(SELECT                     SPY. НОМЕР_ДЕТАЛИ

FROM                          SP SPY

WHERE                       SPY. НОМЕР_ПОСТАВЩИКА ='S2');

Эквивалентный запрос с использованием соединения имеет вид;

SELECT                DISTINCT SPX. НОМЕР_ПОСТАВЩИКА

FROM                   SP SPX, SP SPY

WHERE                SPX. НОМЕР_ДЕТАЛИ = SPY. НОМЕР_ДЕТАЛИ

AND                     SPY. НОМЕР_ ПОСТАВЩИКА = 'S2';





Все публикации раздела