好吧,這是我的問題。假設一個用戶訪問一個CustomerRegions表中定義多個區域:選擇所有,如果沒有子集存在,否則選擇子集
CustomerRegionID | CustomerID | RegionID
----------------------------------------
1 | 1 | 1
2 | 1 | 2
假設客戶1有三個用戶1,2,和3。對於每個用戶可以指定它們有CustomerRegions的通過表格UserRegions訪問:
UserRegionID | UserID | CustomerRegionID
----------------------------------------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
所以用戶1將有權訪問兩個Customerregions和用戶2將只需要CustomerRegion 2.
訪問如果存在對於給定的用戶則只有那些CustomerRegions指定UserRegions存在在結果集中,但如果沒有爲給定用戶指定UserRegions,則所有CustomerRegions都存在於結果中。我想獲得給定客戶的每個用戶的所有可訪問區域。我正在尋找的結果是這樣的:
CustomerID | UserID | RegionID
------------------------------
1 | 1 | 1
1 | 1 | 2
1 | 2 | 2
1 | 3 | 1
1 | 3 | 2
我的問題是可以這樣做在一個單一的查詢,以及如何?
編輯: 我似乎現在的工作:
SELECT CustomerID,
UserID,
RegionID
FROM users
LEFT JOIN customerregions ON customerregions.CustomerID = users.CustomerID
LEFT JOIN userregions ON userregions.UserID = users.UserID AND userregions.CustomerRegionID = customerregions.CustomerRegionID
LEFT JOIN regions ON regions.RegionID = customerregions.RegionID
WHERE (userregions.UserID IS NOT NULL
OR (SELECT COUNT(1) FROM userregions WHERE userregions.UserID = users.UserID) = 0)
AND CustomerID = 1
在那裏額外的數查詢,似乎這樣的伎倆。感謝@Pablo Martinez的幫助。但是,如果有人知道更好的方法來做到這一點,請讓我知道。
表結構是如此混亂 – diEcho