2010-12-01 13 views
1

SQLは下です。各結果は、1回ではなく3回出現しています。SQLクエリが重複した結果を返すのはなぜですか?

SELECT Consignments.LegacyID, TripDate, CollectionName, DeliveryName, Pallets, Weight, BaseRate, Consignments.FuelSurcharge, AdditionalCharges, BaseRate * Quantity AS 'InvoiceValue', Consignments.Customer, InvoiceNumber, 
     CASE 
      WHEN child.LegacyID = Consignments.Customer THEN child.LegacyID 
      WHEN parent.LegacyID = Consignments.Customer THEN parent.LegacyID 
      ELSE this.LegacyID 
     END AS 'InvoiceAcc' 
FROM SageAccount this 
    LEFT JOIN SageAccount parent on parent.LegacyID = this.InvoiceAccount 
    LEFT JOIN SageAccount child on this.LegacyID = child.InvoiceAccount 
    JOIN Consignments on (Consignments.Customer = this.LegacyID AND this.Customer = 'True') 
        OR (Consignments.Customer = parent.LegacyID AND parent.Customer = 'True') 
        OR (Consignments.Customer = child.LegacyID AND child.Customer = 'True') 
WHERE (this.LegacyID = @Customer) AND (TripDate BETWEEN @fromdate AND @todate) AND (InvoiceNumber IS NOT NULL) 

SQLが別の類似のクエリのために私に与えられたが、今回は私が今やっているクエリのためにそれを使用しようとし、それを変更したので、私は私が何かをやっていると仮定しています愚か。

多くのありがとうございます。

答えて

1
JOIN Consignments on (Consignments.Customer = this.LegacyID AND this.Customer = 'True') 
OR (Consignments.Customer = parent.LegacyID AND parent.Customer = 'True') 
OR (Consignments.Customer = child.LegacyID AND child.Customer = 'True') 

私はuが "this.InvoiceAccount" の代わりに、this.LegacyID

を使用する必要がありますね
3

おそらく、左ジョインに親行ごとに3つの子ローがあるためです。 select *を実行して、乗算された行で結果が急激に異なる場所を確認します。

関連する問題