[英]SQL query : Inner join with distinct values
我有兩個表:
表格1
ID | Name
12 User1
77 CostCenter1
78 CostCenter2
79 CostCenter3
14 User2
表2
UserID | AssignedCostCenter
12 77
12 78
12 79
14 78
第一個表收集身份(用戶,成本中心)。 第二個表代表用戶及其允許的CostCenter。
我想實現以下目標:查詢應返回一個列,該列具有分配了超過1個成本中心(兩個或更多)的(唯一)用戶列表。
我首先通過以下兩個表聯接:
Select Table 1.Name
from Table 1
inner join Table 1.ID = Table 2.UserID
結果是:
User1
User1
User1
User2
由於基於ID的inner join
聯接,您將獲得“ user1”和“ user2”。 要獲取已分配了多個成本中心(兩個或多個)的用戶列表,請將查詢修改為:
SELECT Table 1.Name
FROM Table 1
INNER JOIN Table 2 ON Table 1.ID = Table 2.UserID
GROUP BY Table 1.Name
HAVING count(Table 1.name) > 1
在table2
的userid
上使用group by
允許使用have having clause
, having clause
過濾出只有1個成本中心的人,然后對該結果的內部聯接將僅列出具有多個成本中心的人的姓名。
SELECT
Table1.Name
FROM Table1
INNER JOIN (
SELECT
UserID
FROM Table2
GROUP BY
UserID
HAVING COUNT(UserID) > 1
) AS t2 ON Table1.ID = t2.UserID
您的問題尚不清楚表2是否可以重復。 因此,將查詢查詢為:
SELECT t1.Name
FROM Table1 t1 JOIN
Table2 t2
ON t1.ID = t2.UserID
GROUP BY t1.Name
HAVING MIN(t2.AssignedCostCenter) <> MAX(t2. AssignedCostCenter);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.