如何从两个表中进行选择并比较第一个表中的和大于第二个表中的和?

时间:2019-08-16 20:28:47

标签: mysql

我有两个表,一个是费用,另一个是tblinvoice。tblinvoice有一个主键发票ID,它是收费表中的外键。所以我想将每个发票的费用表中所有已支付的金额相加,然后将该金额与tblinvoice中对应的发票金额进行比较或等于。我试着用Google搜索,也尝试自己创建查询,但是没有运气。这是我尝试过的。

select  fees.invoiceid,  SUM(fees.amountpaid) AS finalpay from fees
INNER JOIN tblinvoice
ON fees.invoiceid = tblinvoice.invoiceid

WHERE fees.amountpaid >= (select tblinvoice.amount)

GROUP BY invoiceid 
ORDER BY invoiceid

2 个答案:

答案 0 :(得分:1)

首先为finalpay中的每个invoiceid获得fees并加入tblinvoice

select
  t.invoiceid, t.amount, f.finalpay
from tblinvoice t inner join (
  select invoiceid,  sum(amountpaid) as finalpay 
  from fees
  group by invoiceid
) f on f.invoiceid = t.invoiceid
where f.finalpay >= t.amount
order by t.invoiceid

答案 1 :(得分:1)

您的条件应该在HAVING子句中,在这里您可以使用诸如SUM(fees.amountpaid)或其别名finalpay之类的聚合表达式。

SELECT tblinvoice.invoiceid, SUM(fees.amountpaid) AS finalpay
FROM tblinvoice
INNER JOIN fees ON fees.invoiceid = tblinvoice.invoiceid
GROUP BY tblinvoice.invoiceid, tblinvoice.amount
HAVING finalpay >= tblinvoice.amount
ORDER BY tblinvoice.invoiceid

根据服务器的版本和设置,您可以从GROUP BY子句中删除tblinvoice.amount,因为它在功能上取决于tblinvoice.invoiceid