2010-02-23 3 views
1

Я уже давно разрабатываю этот запрос, и я думал, что у меня есть его там, где я этого хотел, но, видимо, нет.SQL Query Возвращающиеся повторяющиеся результаты

В базе данных (распоряжений) имеется две записи. Запрос должен возвращать две разные строки, но вместо этого возвращает две строки, которые имеют точно такие же значения. Я думаю, что это может быть связано с 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 
+0

Я не думаю, что знаком с ключевым словом 'IFNULL'. Если это не опечатка ('ISNULL'?), Вы должны пометить ее правильной платформой. – Aaronaught

+0

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

+0

IFNULL - эквивалент ISNULL в MySQL –

ответ

2

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

3

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