我有三个这样的表: 发票表
╔════╦════════════╦
║ id ║ invoice_id ║
╠════╬════════════╬
║ 1 ║ 1 ║
║ 2 ║ 2 ║
║ 3 ║ 3 ║
╚════╩════════════╩
账单表
╔════╦════════════╦══════════╗
║ id ║ invoice_id ║bill_amt ║
╠════╬════════════╬══════════╣
║ 1 ║ 1 ║ 50 ║
║ 2 ║ 1 ║ 80 ║
║ 3 ║ 2 ║ 25 ║
║ 4 ║ 2 ║ 55 ║
║ 5 ║ 3 ║ 60 ║
║ 6 ║ 3 ║ 55 ║
╚════╩════════════╩══════════╝
信用表
╔════╦════════════╦══════════╗
║ id ║ invoice_id ║credit_amt║
╠════╬════════════╬══════════╣
║ 1 ║ 1 ║ 50 ║
║ 3 ║ 2 ║ 25 ║
║ 4 ║ 2 ║ 55 ║
║ 5 ║ 3 ║ 60 ║
╚════╩════════════╩══════════╝
我需要所有 invoice_id,其中 (sum(那个 invoice_id 的 credit_amt)-sum(那个 invoice_id 的 bill_amt)) > 0 到目前为止我试过了
select invoice_id from invoice_table where
((select sum(bill_amt) FROM bill_table) - (select sum(credit_amt) FROM credit_table)) > 0
换句话说,我想要这个结果:
╔════════════╗
║ invoice_id ║
╠════════════╣
║ 1 ║
║ 3 ║
╚════════════╝
最佳答案
试试这个:
SELECT i.invoice_id
FROM invoice_table i
LEFT JOIN
(SELECT invoice_id, SUM(bill_amt) AS sum_bill_amt
FROM bill_table
GROUP BY invoice_id) b
ON i.invoice_id = b.invoice_id
LEFT JOIN
(SELECT invoice_id, SUM(credit_amt) AS sum_credit_amt
FROM credit_table
GROUP BY invoice_id) c
ON i.invoice_id = c.invoice_id
WHERE b.sum_bill_amt - c.sum_credit_amt > 0;
关于mysql - select query in where condition 基于主要的select query values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36129270/