[英]Relational Algebra Division sql equivalent
我無法理解關系代數除法的sql等價的翻譯。 我正在努力找到供應各個部分的供應商的sids。 在嵌套查詢中它是否基本上表明它正在“為所有供應商提供不提供每個部件”並且不存在? 但是,條件WHERE C1.sid = C.sid AND C1.pid = P.pid)
也不是針對實際供應每個部分的供應商的sid嗎?
Suppliers(sid: integer, sname: string, address: string)
Parts(pid: integer, pname: string, color: string)
Catalog(sid: integer, pid: integer, cost: real)
SQL翻譯
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)
)
在直接回答您的問題之前,讓我向您介紹如何翻譯查詢。 讓我們首先看一下外部子查詢:
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)
此代碼段獲取“C.sid未提供的部分”。 請注意,子查詢中select子句中的列實際上沒有任何意義。 我們基本上可以像下面這樣編寫查詢並且仍然傳達完全相同的含義,因此您不必擔心C1.sid
在最內層查詢中的含義。
SELECT P.pid
FROM Parts P
WHERE NOT EXISTS (
SELECT *
FROM Catalog C1
WHERE C1.sid = C.sid
AND C1.pid = P.pid)
現在涉及主要查詢
SELECT C.sid
FROM Catalog C
WHERE NOT EXISTS (SELECT *
FROM Parts P
WHERE NOT EXISTS (SELECT *
FROM Catalog C1
WHERE C1.sid = C.sid
AND C1.pid = P.pid)
)
這意味着我們希望供應商(C.sid)不存在“他們未提供的部分(C.sid)”(注意我復制了上面段落中子查詢的翻譯)。 這實際上意味着我們希望供應商提供每個部件。
現在回到你的兩個問題:
在嵌套查詢中它是否基本上表明它正在“為所有供應商提供不提供每個部件”並且不存在?
不,請看上面的解釋。
但是,條件WHERE C1.sid = C.sid AND C1.pid = P.pid也不是針對實際供應每個部分的供應商的sid嗎?
查看與主查詢相關的最內層查詢不是正確的方法。 這個最里面的查詢是為第一個子查詢選擇我們想要的部分。 此處選擇的供應商與上面*替換所示不相關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.