0
以下のコードは、適切な顧客、ロッカー、ユニット、および残高を返します。ただし、コメントアウトされたコードを追加すると、各顧客は1つのクラブのメンバーにしかなれないものの、各クラブの各顧客のデータが再表示されます。T-SQLが重複した行を返す理由I Believe
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
をしかし、私はコメントアウトされたコードが含まれる場合、私は得る:あるように私はそれを実行した場合
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. 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は正しく設定されていますか?
テーブルの顧客とvueClubのキーは何ですか?あなたが不完全な鍵に参加しているようだが、他の人が指摘するように、vueclubにはサイト用の複数のクラブがある。おそらくあなたはサイト以上に加わる必要がありますか?サイトは1:Mのクラブであり、ユーザーはサイトと1:1の関係にあるように見えるので、顧客とサイトの間に1:Mがあるため、レコードが繰り返されます。解決するには、完全なキーに参加する必要があります。顧客とVueClubのDDLを提供する。 DB関係は人生のものと似ています。あなたは彼らの立場を理解しているか、彼らに火をつけてください。 – xQbert