SQL-запрос, возвращающий повторяющиеся результаты - PullRequest
1 голос
/ 23 февраля 2010

Я уже некоторое время работал над этим запросом, и я подумал, что получил его там, где хотел, но, видимо, нет.

В базе данных есть две записи (заказы). Запрос должен возвращать две разные строки, но вместо этого возвращает две строки, которые имеют абсолютно одинаковые значения. Я думаю, что это может быть связано с GROUP BY или производными таблицами, которые я использую, но мои глаза устали и не видят проблемы. Может ли кто-нибудь из вас помочь? Заранее спасибо.

SELECT orders.billerID, 
    orders.invoiceDate, 
    orders.txnID, 
    orders.bName, 
    orders.bStreet1, 
    orders.bStreet2, 
    orders.bCity, 
    orders.bState, 
    orders.bZip, 
    orders.bCountry, 
    orders.sName, 
    orders.sStreet1, 
    orders.sStreet2, 
    orders.sCity, 
    orders.sState, 
    orders.sZip, 
    orders.sCountry, 
    orders.paymentType, 
    orders.invoiceNotes, 
    orders.pFee, 
    orders.shipping, 
    orders.tax, 
    orders.reasonCode, 
    orders.txnType, 
    orders.customerID, 
    customers.firstName AS firstName, 
    customers.lastName AS lastName, 
    customers.businessName AS businessName, 
    orderStatus.statusName AS orderStatus, 
    IFNULL(orderItems.itemTotal, 0.00) + orders.shipping + orders.tax AS orderTotal, 
    IFNULL(orderItems.itemTotal, 0.00) + orders.shipping + orders.tax - IFNULL(payments.totalPayments, 0.00) AS orderBalance 
FROM orders 
LEFT JOIN customers ON orders.customerID = customers.id 
LEFT JOIN orderStatus ON orders.orderStatus = orderStatus.id
LEFT JOIN 
    ( 
      SELECT orderItems.orderID, SUM(orderItems.itemPrice * orderItems.itemQuantity) as itemTotal
      FROM orderItems
      GROUP BY orderItems.orderID
    ) orderItems ON orderItems.orderID = orders.id 
LEFT JOIN 
    ( 
      SELECT payments.orderID, SUM(payments.amount) as totalPayments
      FROM payments
      GROUP BY payments.orderID
    ) payments ON payments.orderID = orders.id

Ответы [ 2 ]

3 голосов
/ 10 июня 2010

Как правило, когда вы объединяете много таблиц и получаете дублирующиеся строки, это происходит потому, что вы не видите всю картинку.Если бы вы сделали «select *», чтобы увидеть все столбцы, включенные в запрос (вместо того, чтобы возвращать подмножество столбцов) и сравнить результирующие строки, вы бы обнаружили, что где-то по пути есть столбец, содержащий разные данные.

2 голосов
/ 23 февраля 2010

Когда у меня возникает эта проблема, я начинаю комментировать по одному соединению за раз (и связанные выбранные столбцы), пока не найду вызывающее ошибку соединение, вызывающее проблему.

...