根据多个条件

时间:2018-06-07 13:57:30

标签: sql sql-server join ssms

我有一份我试图提取的客户列表,但我不确定我是否正确行事。我有大约20个thounsand记录要经历,只希望我以正确的方式做到这一点。基本上我有2个不同的客户端表,它们恰好属于2个不同的应用程序,但存储在同一个数据库中。

客户端John Doe(ex)可以位于具有不同客户端ID的两个客户端表中,但是,两个表中的uniqueID都相同。因此,例如John Doe在tbl1中可以具有clientID = 7,在tb2中可以具有ClientID = 11,但在两个客户端表中,唯一ID是129009。

这是基本结构。这是前两个表格。

tblClient1                             tblServiceClient1
ClientID        UniqueID               ClientID          ClientServiceType
17              12345                  17                8
15              34567                  15                8

第二组表是

tblClient2                             tblClientService2
ClientID        UniqueID               ClientID           ClientServiceType
58              12345                  58                 8
89              34567                  89                 7

我希望得到的是一组客户,从两组表中可以看出: -Client必须存在于tblClient1& tblClient2 -Client必须在tblClientServiceType1&中具有ClientServiceType = 8。 tblClientServiceType2

这是我希望实现的目标:

ClientID1            ClientID2           UniqueID
17                   58                  12345

所以我需要加入两个ClientID表中的客户端具有相同UniqueID且两个客户端都具有ClientSErviceType = 8

的表。

我只看到这个客户端,因为另一个客户端的ClientServiceType = 7

  Select tblClient1.ClientID, tblClient2.ClientID, tblClient1.UniqueID
       From tblClient1 
       inner join tblClientService1 on tblClient1.ClientID = tblClientService1.ClientID 
       inner join tblClient2 on tblClient1.UniqueID = tblClient2.UniqueID 
       inner join tblServiceClient2 on tblClient2.ClientID = tblServiceClient2.ClientID
  Group By tblClient1.ClientID, tblClient2.ClientID, tblClient1.UniqueID
  Having tblServiceClient1.ClientServiceType = 8 and tblServiceClient2.ClientServiceType=8

1 个答案:

答案 0 :(得分:2)

使用您的查询作为示例(看起来它会返回您想要的数据)我简化了一下。我也使用别名,注意它如何显着减少文本量,这使得它更容易阅读。

Select c1.ClientID
    , c2.ClientID
    , c1.UniqueID
From tblClient1 c1
inner join tblClientService1 cs1 on c1.ClientID = cs1.ClientID 
inner join tblClient2 c2 on c1.UniqueID = c2.UniqueID 
inner join tblServiceClient2 sc2 on c2.ClientID = sc2.ClientID
    AND cs1.ClientServiceType = sc2.ClientServiceType
where cs1.ClientServiceType = 8