作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个facture表和一个fournisseur表,但我想从数据库中选择我所有的fournisseur,并且我想计算字段nvsolde (solde-SUM(facture.montant))。但是当我使用这个请求时,它给出的只是 fournisseur 已经有一个裂缝。
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"
最佳答案
根据您描述问题的方式,您需要一个左连接
。现在是添加以下建议的好时机:永远不要在 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 标准一致)。但是,使用其他列绝对是一种不好的做法。关于mysql - 如何从两个表中选择并计算数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33612165/
我是一名优秀的程序员,十分优秀!