mysql - select query in where condition 基于主要的select query values

标签 mysql sql

我有三个这样的表: 发票表

╔════╦════════════╦
║ 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/

相关文章:

mysql - 多个 SQL 选择使用值来进一步搜索

sql - 如何在 sql (oracle) 中既不是 null 又不是 not in 语句?

java - 使用经纬度返回用户位置可用的最近地点?

php - 如何在 SQL 中合并两 (3) 个以上的表

PHP 脚本无法在本地计算机上运行,​​但可以在网络服务器上运行

sql - 从两列中选择非不同的行

sql - 程序-case语句错误

mysql - 一个站点 : multiple clients : how to organize

mysql - 根据其他表的时间戳动态控制 SQL Select

sql - 如何使用条件组明智地将列值替换为其先前的值