РУКОВОДСТВО ПО РЕЛЯЦИОННОЙ СУБД DB2

         

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


Выдать номера всех деталей, поставляемых более чем одним поставщиком. (Другое решение этой задачи дается позднее в примере 5.4.9):

SELECT                DISTINCT SPX. НОМЕР_ДЕТАЛИ

FROM                   SP SPX

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

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

FROM                          SP SPY

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

Ø

= SPX. НОМЕР_ПОСТАВЩИКА);

Результат:

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

P1

P2

P4

P5

Действие этого запроса можно пояснить следующим образом. «Поочередно для каждой строки таблицы SP, скажем SPX, выделить значение НОМЕР_ДЕТАЛИ, если и только если это значение входит в некоторую строку, скажем SPY, таблицы SP, значение столбца НОМЕР_ПОСТАВЩИКА в которой не является его значением в строке SPX». Заметим, что в этой формулировке должен

быть использован по крайней мере один псевдоним — либо SPX, либо SPY, но не они оба, может быть заменен просто на SP.



Содержание раздела