J'ai deux tablessomme Sélectionner et jointure
Bills
:id amount reference
Transactions
:id reference amount
La requête SQL suivante
SELECT
*,
(SELECT SUM(amount)
FROM transactions
WHERE transactions.reference = bils.reference) AS paid
FROM bills
GROUP BY id HAVING paid<amount
était destiné à certaines lignes de la table Bills
, en ajoutant une colonne paid
avec la somme du montant des transactions associées. Cependant, cela ne fonctionne que lorsqu'il y a au moins une transaction pour chaque facture. Sinon, aucune ligne pour une facture sans transaction n'est renvoyée. Probablement, c'est parce que j'aurais dû faire une jointure interne!
Je les opérations suivantes:
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
Cependant, cela renvoie la même valeur payée pour toutes les lignes! Qu'est-ce que je fais mal ?
Mais il n'y a pas de colonne "payée" dans "Bills", cela doit être défini comme la somme du montant des transactions.Si j'essaie de le modifier pour corriger cela, je n'ai toujours que la ligne "Bills" avec au moins une transaction. – Klaus
@Klaus: Je vois, c'est là que vous avez obtenu cela de ... La somme sera nulle s'il n'y a pas de transactions, vous devrez donc gérer cela. Voir le code ci-dessus. – Guffa
Merci beaucoup, le 'ifnull' (pas' isnull') et la jointure gauche ont fait l'affaire! – Klaus