4 Stimmen

SQL-Abfrage, die doppelte Ergebnisse liefert

Ich arbeite nun schon eine Weile an dieser Abfrage und dachte, ich hätte sie da, wo ich sie haben wollte, aber anscheinend nicht.

Es gibt zwei Datensätze in der Datenbank (Aufträge). Die Abfrage sollte zwei verschiedene Zeilen zurückgeben, gibt aber stattdessen zwei Zeilen zurück, die genau dieselben Werte haben. Ich denke, es könnte etwas mit den GROUP BY- oder abgeleiteten Tabellen zu tun haben, die ich verwende, aber meine Augen sind müde und sehen das Problem nicht. Kann mir jemand von Ihnen helfen? Vielen Dank im Voraus.

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

5voto

codingintherain Punkte 263

Wenn Sie mehrere Tabellen verknüpfen und dabei doppelte Zeilen erhalten, liegt das in der Regel daran, dass Sie nicht das gesamte Bild sehen. Wenn Sie eine "select *"-Abfrage durchführen, um alle in der Abfrage enthaltenen Spalten zu sehen (anstatt eine Teilmenge von Spalten zurückzugeben), und die resultierenden Zeilen vergleichen, werden Sie feststellen, dass irgendwo auf dem Weg eine Spalte liegt, die unterschiedliche Daten enthält.

2voto

used2could Punkte 4958

Wenn ich dieses Problem habe, beginne ich damit, eine Verknüpfung nach der anderen (und die zugehörigen ausgewählten Spalten) auszukommentieren, bis ich die fehlerhafte Verknüpfung finde, die das Problem verursacht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X