我無法理解關係代數分解的sql等價物的翻譯。我試圖找到供應每個零件的供應商的標準。在嵌套查詢中,它基本上表明它正在尋找「供應所有不提供每個零件的供應商」並且不存在? 但條件WHERE C1.sid = C.sid AND C1.pid = P.pid)
也不是針對實際供應每個零件的供應商的sid嗎?關係代數分區sql相當於
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 C.sid FROM目錄Ç 凡存在(SELECT * FROM 零件P WHERE EXISTS(SELECT * FROM 目錄C1 WHERE C1.sid = C.sid AND C1.pid = P.pid ) – Sam
這是不一樣的,這意味着只提供至少一個零件的供應商。不存在兩次並不總是意味着雙重否定,因爲您正在將它們做成不同的表/列。 您是否嘗試用基本的關係代數運算(投影,選擇,差異,笛卡爾乘積,重命名)重寫C÷P?你會看到結果有兩個不同的運算符。您不能將兩個不同的運算符合併爲一個或零。這相當於您不能摺疊兩個連續的非存在查詢。 – KangarooWest