Почему мой запрос SQL возвращает повторяющиеся результаты? - PullRequest
1 голос
/ 01 декабря 2010

SQL ниже - каждый результат появляется 3 раза, а не один раз.

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 был дан мне для другого аналогичного запроса, но на этот раз я изменил его, чтобы попытаться использовать его для запроса, который я делаю сейчас, поэтому я предполагаю, что яделать что-то глупое.

Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 01 декабря 2010

вероятно, потому что ваши левые соединения имеют 3 дочерних строки на родительскую строку. сделайте выбор *, чтобы увидеть, где ваши результаты резко отличаются в умноженных строках.

1 голос
/ 01 декабря 2010
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')

Я думаю, вы должны использовать "this.InvoiceAccount" вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...