SQL查询:具有不同值的内部联接

时间:2018-09-22 07:09:58

标签: sql

我有两个表:

表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

3 个答案:

答案 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 byuserid上使用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);