2010-02-23 186 views
1

我一直在研究這個查詢現在一段時間,我想我有它在我想要的地方,但顯然不是。SQL查詢返回重複結果

數據庫中有兩條記錄(訂單)。該查詢應該返回兩個不同的行,但是會返回兩個具有完全相同值的行。我認爲這可能與我使用的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 2010-02-23 05:10:25

+0

嘗試逐個刪除連接,直到獲得您期望的單個行。最後一個被刪除的是罪魁禍首。 – 2010-02-23 05:11:24

+0

IFNULL是MySQL中的ISNULL等效項 – 2010-02-23 05:17:08

回答

2

當我有這個問題我開始註釋掉一個連接在同一時間(以及相關的選定列),直到我找到有問題的聯接造成問題的原因。

3

通常,當你加入許多表格並以重複行結束時,這是因爲你沒有看到整個圖片。如果您要執行「select *」來查看查詢中包含的所有列(而不是返回列的子集)並比較結果行,您會發現在某個地方有一列包含不同數據的列。