我有一张制作表和一张fournisseur表,但我想从数据库中选择所有我的四位数,我想计算字段nvsolde(solde-SUM(facture.montant))。但是当我使用这个请求时,它只给了四个人已经有了一个制服。
SELECT fournisseur.id
, fournisseur.nom
, fournisseur.solde
, fournisseur.solde-SUM(facture.montant) AS nvsolde
FROM fournisseur
, facture
WHERE facture.id = fournisseur.id
GROUP BY fournisseur.nom"
答案 0 :(得分:0)
从描述问题的方式来看,您需要left join
。现在是添加此建议的好时机:从不在FROM
子句中使用逗号。 始终使用明确的JOIN
语法。
SELECT fo.id, fo.nom, fo.solde,
fo.solde - COALESCE(SUM(fa.montant), 0) AS nvsolde
FROM fournisseur fo LEFT JOIN
facture fa
ON fa.id = fo.id
GROUP BY fo.id;
一些注意事项:
COALESCE()
。这会将NULL
转换为0
。ORDER BY
使用id
列,该列可能在fornisseurs
中是唯一的。 GROUP BY
中使用主键或唯一键是可以接受的,也是一种很好的做法(甚至符合ANSI标准)。但是,使用其他列肯定是糟糕的练习。