簡體   English   中英

根據第 3 個表的數量從 2 個表中選擇

[英]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,
       COU­NT(distinct reimbursement.reimbu­rse_id) as nor,
       SUM(distinct reimbursement.reimbu­rse_total)
FROM member INNER JOIN
     reimbursement 
     ON member.member_id = reim­bursement.member_id INNER JOIN
     receipt
     ON reimbursement.reimbu­rse_id=receipt.reimb­urse_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 reimbu­rse_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.reimbu­rse_id = rr.reimb­urse_id
GROUP BY m.memberID, m.member_name;

此查詢背后的邏輯是僅使用receipt表來確定報銷是否可用。 select distinct刪除重復項。 然后left joincase確定是否有匹配表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM