我有4张桌子。
表1:发票编号,金额,超出金额
表2:编号,金额
表3:编号,金额
表4:编号,文字,编号,发票编号
示例数据:
表格1:
1001, 5000,3000
表2:
6, 2000
10,1000
表3:
8, 2000
表4:
1,Table_2,6,1001
2,Table_3,8,1001
3, Table_2,10,1001
对于相同的发票编号,超出金额=金额(发票)-金额(表2)-金额(表3)。
查询应输出更正的超出额。
在这种情况下,正确的超出金额为0,而不是3000。
请注意,其中一个表(即表2或表3)可能没有该发票编号的条目。
概念:
遍历表1中的每一行。
从表4中选择所有行,其中发票号=来自表1的发票号。
从表2条目中获取sum(Amount),其中Text ='Table 2'从步骤2中的行中检索,并且id = id(从step2中检索)。
从id中获取表3项的sum(Amount),这些ID是从第2步中Text ='Table 3'且id = id(从step2得出)的行中检索的。
将这些金额相加并从步骤1中获得的表1中的金额中减去。
将其与未付金额核对,如果不同,则输出更正的未付金额和发票编号。
如何将这个想法转换为适当的SQL查询以获得所需的输出?
最佳答案
只需根据发票编号查询
select t1.invoice_number,Case WHEN t1.Outstanding_amount=(t1.amount-t2.amount-t3.amount) Then t1.Outstanding_amount ELSE (t1.amount-t2.amount-t3.amount) from table_1 t1
join table_4 t4 on t1.Invoice_number=t4.Invoice_number
Join table_2 t2 on t4.text=t2.ID
Join Table_3 t3 on t4.text=t3.id where t1.Invoice_number='1001'
关于mysql - 嵌套SQL查询并验证未付金额,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41782377/