異常情況 - 我不能肯定我明白爲什麼你有一個RIGHT JOIN在LEFT JOIN之中的條件;這是使我的大腦短路的事情。
你有4個表:
- 訂單 - 列的OrderID,RegionID,...
- 地區 - 列RegionID,...
- 率 - 列RateID,SalesID,...
- RateSet - 列RateSetID,訂單ID,...
我們可以猜測,對於表的Xyz,XyzID列是表的主鍵。我們可以猜測,表中的列參考表Pqr(SalesID除外,其中沒有對應的表銷售 - 但它似乎是連接Rate和RateSet的外鍵(令人費解在該模式不一致)。
這本來是有幫助的提供問題信息。你可能已經有了答案更快的那個樣子,太。
一個給定的順序似乎有一個(可能是幾個)給定名稱,看起來給定的費率集可以有多個費率,包括零,但不清楚是否可以創建沒有任何關聯速率集的訂單,因此我們會保守地認爲它可能會發生。
我不認爲我們需要從地區選擇;訂單表中的RegionID就是足夠的區域標識。以下查詢列出了每個訂單的訂單信息,其中RateSet表中沒有信息或RateSet的費率表中沒有信息。
SELECT DISTINCT O.*
FROM Order AS O
LEFT JOIN RateSet AS S ON S.OrderID = O.OrderID
LEFT JOIN Rate AS T ON T.SalesID = S.RateSetID
WHERE T.RateID IS NULL
現在,該地區有一個或更多的訂單,但不是一個命令該區域的有多少?
SELECT G.RegionID
FROM Region AS G
WHERE NOT EXISTS
(SELECT DISTINCT O.RegionID
FROM Order AS O
JOIN RateSet AS S ON O.OrderID = S.OrderID
JOIN Rate AS T ON S.RateSetID = T.SalesID
)
子選擇列出具有指定速率的訂單的RegionID值 - 使用內部聯接意味着只有具有速率的行將被選中。沒有列入清單的地區是唯一一個「沒有訂單的地區」的候選地區。因此,我們加入該表與之前的查詢:
SELECT DISTINCT O.*
FROM Order AS O
LEFT JOIN RateSet AS S ON S.OrderID = O.OrderID
LEFT JOIN Rate AS T ON T.SalesID = S.RateSetID
JOIN (SELECT G.RegionID
FROM Region AS G
WHERE NOT EXISTS
(SELECT DISTINCT O.RegionID
FROM Order AS O
JOIN RateSet AS S ON O.OrderID = S.OrderID
JOIN Rate AS T ON S.RateSetID = T.SalesID
)
) AS K ON O.RegionID = K.RegionID
WHERE T.RateID IS NULL
架構結構具有足夠的不同尋常,我不知道這一點 - 但它看起來正確。