簡體   English   中英

SQL-篩選出一個完整的組,該組的至少一個成員不屬於特定結果

[英]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

目標結果邏輯:

  1. G1-不應顯示,因為它有一個部門'36',該部門不屬於允許的部門列表。

  2. G2-應該是結果的一部分,因為部門'43和46'都是允許部門的一部分。

  3. G3-應該顯示,因為“ 1”是允許的部門的一部分。

  4. 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;

db <> fiddle演示


也可以按照@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM