为什么T-SQL返回重复行,加入问题我相信

时间:2017-01-05 22:14:15

标签: sql sql-server

以下代码返回相应的客户,储物柜,单位和余额。但是,当我添加注释掉的代码时,它会重复每个客户的每个俱乐部的数据,即使每个客户只能是一个俱乐部的成员。

USE db1
GO

SELECT [db1].[dbo].[Customer].[CustomerNumber] AS 'Customer No.'
--  ,A. ClubID AS 'Club ID No.'
,(SELECT CONCAT (SI.Locker, '-', SI.Frequency)) AS Locker
,SI.Unit AS Unit
--,[db2].[dbo].[vueClub].Club_aka AS Club
,[db1].[dbo].[Customer_Balance].[CurrentBalance]

FROM [db1].[dbo].[Customer_Balance]
JOIN [db1].[dbo].[Customer]
    ON [db1].[dbo].[Customer_Balance].POSCusNo = Customer.CustomerNumber
    JOIN [SQLSrv01].[ db3].[dbo].[md_Table_1] AS D
    ON D.Contract_no = [db1].[dbo].[Customer_Balance]. POSCusNo
    JOIN [SQLSrv01].[ db2].[dbo].[vueSoldLockers] AS SI
    ON SI.CustomerID = [db1].[dbo].[Customer].CustomerID
    --JOIN [db2].[dbo].[vueClub] AS A
    --ON [db1].[dbo].[Customer].SiteID = A.SiteID
WHERE [db1].[dbo].[Customer_Balance].StatusCode = '1234'
ORDER BY Customer.CustomerNumber ASC

所以,如果我按原样运行它:

Customer No.    Locker  Unit    Current Balance
1               315     A1      456.00
2               316     A3      1204.70
3               317     B2      335.60
4               318     B4      1500.30

但如果我包含已注释掉的代码,我会得到:

Customer No. Club ID No Locker  Unit    Club    Current Balance
1            4          315     A1      Tigers  456.00
1            3          315     A1      Lions   456.00
2            4          316     A3      Tigers  1204.70
2            3          316     A3      Lions   1204.70
3            4          317     B2      Tigers  335.60
3            3          317     B2      Lions   335.60
4            4          318     B4      Tigers  1500.30
4            3          318     B4      Lions   1500.30

是因为我没有正确设置JOIN吗?

1 个答案:

答案 0 :(得分:0)

Customer No. Club ID No Locker  Unit    Club    Current Balance
1            4          315     A1      Tigers  456.00
1            3          315     A1      Lions   456.00

您正在SiteID上加入客户到vueClub。看起来网站客户1所在,有2个俱乐部(3,4)