Für meine eigene Erbauung, ich versuche, diese SQL-Funktionalität in einer einzigen Anweisung zu schreiben, ohne temporäre Tabellen zu verwenden. Für das Leben von mir kann ich die Abfrage nicht funktionieren, ohne einen MySQL "ERROR 1248 (42000) zu bekommen: Jede abgeleitete Tabelle muss ihren eigenen Alias haben."Bitte erklären Sie, wie Sie diese SQL als einzelne Anweisung mit abgeleiteten Tabellen ausdrücken können
Hier ist etwas ähnlich, wenn auch gebrochen, zu dem, was ich will:
SELECT split.share, split.weight, split.creditor, split.debtor, share.amount, wsum.sum
FROM (
SELECT split.share, split.weight, split.creditor, split.debtor, share.amount
FROM (split LEFT JOIN share ON split.share = share.id)
WHERE debtor = 6 OR creditor = 6)
LEFT JOIN (
SELECT split.share, SUM(weight) AS sum
FROM split
GROUP BY split.share
) wsum
ON split.share = wsum.share;
Hier ist eine funktionierende Version von dem, was ich versuche, temporäre Tabellen zu exprimierenden mit:
CREATE TEMPORARY TABLE weightsum (share INT, sum INT);
INSERT INTO weightsum (share, sum)
SELECT split.share, SUM(weight) AS sum
FROM split
GROUP BY split.share;
CREATE TEMPORARY TABLE summary (share INT, weight INT, creditor INT, debtor INT, amount DECIMAL(10,2));
INSERT INTO summary (share, weight, creditor, debtor, amount)
SELECT split.share, split.weight, split.creditor, split.debtor, share.amount
FROM (split LEFT JOIN share ON split.share = share.id)
WHERE debtor = 6 OR creditor = 6;
SELECT summary.share, summary.weight, weightsum.sum, summary.creditor, summary.debtor, summary.amount, ((summary.amount/weightsum.sum) * summary.weight) AS split_amount
FROM summary LEFT JOIN weightsum
ON summary.share = weightsum.share;
Danke für die Hilfe .