Ich habe zwei TabellenSelect Summe und innere Verknüpfung
Bills
:id amount reference
Transactions
:id reference amount
Die folgende SQL-Abfrage
SELECT
*,
(SELECT SUM(amount)
FROM transactions
WHERE transactions.reference = bils.reference) AS paid
FROM bills
GROUP BY id HAVING paid<amount
war für einige Zeilen aus der Tabelle Bills
gedacht, indem eine Spalte paid
mit der Summe der Anzahl verwandter Transaktionen hinzugefügt wurde.
Es funktioniert jedoch nur, wenn für jede Rechnung mindestens eine Transaktion vorhanden ist. Andernfalls wird keine Zeile für eine transaktionslose Rechnung zurückgegeben.
Wahrscheinlich, das ist, weil ich eine innere Verbindung hätte machen sollen!
Also versuche ich folgendes:
SELECT
*,
(SELECT SUM(transactions.amount)
FROM transactions
INNER JOIN bills ON transactions.reference = bills.reference) AS paid
FROM bills
GROUP BY id
HAVING paid < amount
Dies ist jedoch für alle Zeilen den gleichen Wert der bezahlten zurück! Was mache ich falsch ?
Aber es gibt keine "bezahlte" Spalte in "Rechnungen", dies muss als die Summe der Anzahl der Transaktionen definiert werden.Wenn ich versuche, es zu ändern, um das zu korrigieren, bekomme ich immer noch nur 'Bills'-Zeile mit mindestens einer Transaktion. – Klaus
@Klaus: Ich sehe, das ist, wo Sie das von ... Die Summe wird null sein, wenn es keine Transaktionen gibt, also müssten Sie damit umgehen. Siehe Code oben. – Guffa
Vielen Dank, der 'ifnull' (nicht' isnull') und linke Join schafften den Trick! – Klaus