我有一份我试图提取的客户列表,但我不确定我是否正确行事。我有大约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
答案 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