mysql - 内部连接和左连接在 mysql 中没有按预期工作

标签 mysql

我有3张 table

table_supplier_bills - bill_id, supplier_id, date
table_supplier_bill_details - bill_id, product_id, quantity, rate
table_supplier_bill_payment_details - id, bill_id, payment_date, amount

我想获取所有账单及其 bill_amount 和 paid_amount。

这是我的查询。

select 
SB.bill_id, 
SB.date, SB.supplier_id, 
SUM(SBD.quantity * SBD.rate) as bill_amount, 
COALESCE(SUM(SBPD.payment_amount), 0.00) as paid_amount 
from table_supplier_bills SB 
INNER JOIN 
table_supplier_bill_details SBD 
ON SB.bill_id = SBD.bill_id 
LEFT JOIN table_supplier_bill_payment_details SBPD 
ON SBD.bill_id = SBPD.bill_id 
group by SBD.bill_id;

但是,如果 table_supplier_bill_details 中有多行账单,则此查询不会给出正确的 paid_amount。在多行查询的情况下,paid_amount 乘以该表的 table_supplier_bill_details 中的行数。

谁能帮我看看这是怎么回事?

最佳答案

改为使用相关查询:

SELECT SB.bill_id, 
       SB.date,
       SB.supplier_id, 
       SUM(SBD.quantity * SBD.rate) as bill_amount, 
       COALESCE((SELECT SUM(SBPD.payment_amount)
                 FROM table_supplier_bill_payment_details SBPD 
                 WHERE SBD.bill_id = SBPD.bill_id ),0.00) as paid_amount 
FROM table_supplier_bills SB 
INNER JOIN table_supplier_bill_details SBD 
 ON SB.bill_id = SBD.bill_id
GROUP BY SBD.bill_id;

关于mysql - 内部连接和左连接在 mysql 中没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40827140/

相关文章:

php - php 文件的问题

MySQL AND条件括号不起作用

MySQL从表中每个不同外键的10行中选择id

mysql - 如何使用 Innodb 确保 MySQL 中的多个表列是唯一的(或重构我的表)?

mysql - 在 MySQL 中删除表

php - 在 Mac OS X 服务器上为 MySQL 安装 PDO 扩展

mysql - 有效美国电话号码的正则表达式

php - MySQL Case when then 子句

php - MySQL PHP Escape String '\' - 为什么它没有用反斜杠保存在数据库中?

mysql - JDBC 从表中选择所有记录,仅返回 1