使用两个不同表的总和进行mysql计算

使用两个不同表的总和进行mysql计算,mysql,sql,Mysql,Sql,如果有两个表: TABLE "deposit" card | amount ------------ 2 | 123.43 2 | 56.45 3 | 21.19 + 我要找的是卡号的剩余存款。 卡2示例:123.43+56.45-10.59-10.59(仅状态=完成) 或:金额(卡id为2的存款)-金额(卡id为2且状态为完成的付款) 我尝试了以下mysql选择: SELECT( IFNULL(SUM(deposit.amount),0) - IFNULL(SUM(paymen

如果有两个表:

TABLE "deposit"
card | amount
------------
2 | 123.43
2 | 56.45
3 | 21.19
+

我要找的是卡号的剩余存款。

卡2示例:123.43+56.45-10.59-10.59(仅状态=完成)

或:金额(卡id为2的存款)-金额(卡id为2且状态为完成的付款)

我尝试了以下mysql选择:

SELECT(
       IFNULL(SUM(deposit.amount),0) - IFNULL(SUM(payment.price),0)
        ) AS remaing_deposit
        FROM deposit, payment
        WHERE deposit.card = '2'
        OR (
            payment.card = '2' AND payment.status = 'finish'
        )
但是我得到了完全错误的数字


有人能帮我吗?

这里的一个挑战是这两张桌子上有不同的牌。MySQL不支持
完全外部连接
。您可以通过
联合
获得卡片列表

查询的其余部分通过使用
所有卡片上的
左外部联接将
from
子句和d中的两个表聚合来解决:

select allcards.card, coalesce(d.deposit, 0) - coalesce(p.price, 0) as RemainingDeposit
from (select card from deposit union
      select card from payment
     ) allcards left outer join
     (select card, sum(amount) as deposit
      from deposit
      group by card
     ) d 
     on d.card = allcards.card left outer join
     (select card, sum(price) as price
      from payment
      where status = 'finish'
      group by card
    ) p
    on p.card = allcards.card;

您似乎缺少一些主键!谢谢你的快速帮助!它工作完美!!!!我加上“WHERE card=2”以获得一张卡的剩余存款。
select allcards.card, coalesce(d.deposit, 0) - coalesce(p.price, 0) as RemainingDeposit
from (select card from deposit union
      select card from payment
     ) allcards left outer join
     (select card, sum(amount) as deposit
      from deposit
      group by card
     ) d 
     on d.card = allcards.card left outer join
     (select card, sum(price) as price
      from payment
      where status = 'finish'
      group by card
    ) p
    on p.card = allcards.card;