[英]select from 2 table based on count of 3rd table
我有3張桌子。 會員報銷和收據。 我想顯示會員的名字,有收據的報銷總額。 例如
成員
member_id member_name
1 luffy
2 zoro
3 nami
報銷
reimburse_id member_id reimburse_total
1 1 5000
2 2 10000
3 3 10000
收據
receipt_id reimburse_id reimburse_price reimburse_no
1 1 2500 2012232
2 1 2500 2012123
3 2 5000 2012454
4 2 5000 2012565
我想顯示有收據的會員的所有報銷。 在這種情況下,選擇查詢應該像這樣返回
name No. of reimburse total
luffy 1 5000
zoro 1 10000
nami 0 0
到目前為止,這是我得到的
SELECT member.member_name,
COUNT(distinct reimbursement.reimburse_id) as nor,
SUM(distinct reimbursement.reimburse_total)
FROM member INNER JOIN
reimbursement
ON member.member_id = reimbursement.member_id INNER JOIN
receipt
ON reimbursement.reimburse_id=receipt.reimburse_id
GROUP BY member.memberID
但我得到了錯誤的總數。
嗯。 這有點奇怪,因為您只是使用receipt
來確定是否應該使用這些值。 一種方法是LEFT JOIN
和一些條件邏輯:
SELECT m.member_name,
COUNT(rr.reimburse_id) as nor,
SUM(CASE WHEN rr.reimburse_id IS NOT NULL THEN reimburse_total ELSE 0 END) as reimburse_total
FROM member m LEFT JOIN
reimbursement r
ON m.member_id = r.member_id LEFT JOIN
(SELECT DISTINCT rr.reimburse_id
FROM receipt rr
) rr
ON r.reimburse_id = rr.reimburse_id
GROUP BY m.memberID, m.member_name;
此查詢背后的邏輯是僅使用receipt
表來確定報銷是否可用。 select distinct
刪除重復項。 然后left join
和case
確定是否有匹配表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.