我有两个表:
表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
答案 0 :(得分:0)
由于inner join
基于ID,您将获得“ 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
答案 1 :(得分:0)
在group by
中userid
上使用table2
可以使用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 :(得分:0)
您不清楚表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);