Pour ma propre création, j'essaie d'écrire cette fonctionnalité SQL dans une instruction unique sans utiliser de tables temporaires. Pour la vie de moi, je ne peux pas obtenir la requête pour fonctionner sans avoir un MySQL "ERROR 1248 (42000): Chaque table dérivée doit avoir son propre alias."Veuillez expliquer comment exprimer ce SQL en tant qu'expression unique à l'aide de tables dérivées
est ici quelque chose de semblable, quoique brisé, à ce que je veux:
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;
est ici une version de travail de ce que je suis en train de exprimés à l'aide des tables temporaires:
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;
Merci pour l'aide .