[英]SQL - Filter out a complete group that has at least one member not part of a specific result
我有兩個SQL表:
表-1(Group_Departments)
Group--------- | ---------Department_ID
G1 ---------- | ------------- 1
G1 ---------- | ------------- 43
G1 ---------- | ------------- 6
G2 ---------- | ------------- 43
G2 ---------- | ------------- 46
G3 ---------- | ------------- 1
G3 ---------- | ------------- 1
G4 ---------- | ------------- 46
G4 ---------- | ------------- 43
G4 ---------- | ------------- 1
G4 ---------- | ------------- 32
表2(Allowed_Departments)
Department_ID
1
46
43
目標結果邏輯:
G1-不應顯示,因為它有一個部門'36',該部門不屬於允許的部門列表。
G2-應該是結果的一部分,因為部門'43和46'都是允許部門的一部分。
G3-應該顯示,因為“ 1”是允許的部門的一部分。
G4-不應該出現。 盡管其中三個部門是允許部門的一部分,但是部門“ 32”中的一個部門不是允許部門的一部分。
查詢結果應為:
G2
G3
您可以使用HAVING
和條件聚合:
SELECT [Group]
FROM Group_Departments gd
LEFT JOIN Allowed_Departments ad
ON gd.department_id = ad.department_id
GROUP BY [Group]
HAVING SUM(CASE WHEN ad.department_id IS NULL THEN 1 ELSE 0 END) = 0;
也可以按照@Gordon Linoff的建議:
SELECT [Group]
FROM Group_Departments gd
LEFT JOIN Allowed_Departments ad
ON gd.department_id = ad.department_id
GROUP BY [Group]
HAVING COUNT(ad.department_id) = COUNT(*)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.