我想要提供每個部件的供應商的SIDS。我無法理解本書給出的查詢答案。SQL嵌套不存在瞭解
Suppliers(sid: integer, sname: string, address: string)
Parts(pid: integer, pname: string, color: string)
Catalog(sid: integer, pid: integer, cost: real)
假設給定了一個數據庫,如下所示:
表:零件
PID
P1
P2
P3
表:目錄
SID PID
S1 P1
S1 P2
S1 P3
S2 P1
它應該輸出S1,但我相信用給定的查詢,它將輸出S1和S2。最後一個嵌套查詢不會滿足SID = 2嗎?因爲如果C1.sid = S2和C.sid = S2並且C1.pid = P1並且P.pid = P1,那麼它將滿足查詢。
這本書的答案給出如下: SQL翻譯:「C.Sid爲不存在未通過C.Sid提供的部分」
SELECT C.sid
FROM Catalog C
WHERE NOT EXISTS (SELECT P.pid
FROM Parts P
WHERE NOT EXISTS (SELECT C1.sid
FROM Catalog C1
WHERE C1.sid = C.sid
AND C1.pid = P.pid)
)