[英]Sql Query with 1 Join and 2 Where Clauses not returning all records
伙計們,嘗試編寫查詢以獲取project_id =嗎? 以及來自幾個表格的“新”中的狀態,所以讓我細分一下。
我有這三張桌子
案例狀態
id case_status
1 New
2 Failed
3. Accepted
轉介
id case_status_id project_id application_id
1 1 1 20
2 2 1 21
項目
id name
1 project1
2 project2
這是我的查詢
SELECT COUNT(referrals.id) AS count_all, case_statuses.case_status AS counted
FROM "case_statuses" LEFT OUTER JOIN "referrals" ON "referrals"."case_status_id" = "case_statuses"."id"
WHERE "case_statuses"."deleted_at" IS NULL AND (case_statuses.case_status IN ('New') AND referrals.project_id = 1)
GROUP BY case_statuses.case_status;
這是我的結果
count_all counted
1 New
1 Failed
但是我期望這個結果
count_all counted
1 New
1 Failed
0 Accepted
有誰知道我的查詢出了什么問題,該查詢未顯示所有case_statuses的計數?
謝謝
第二個表的條件(在left join
)應位於on
子句中:
SELECT COUNT(r.id) AS count_all, cs.case_status AS counted
FROM case_statuses cs LEFT OUTER JOIN
referrals r
ON r.case_status_id = cs.id AND r.project_id = 1
WHERE cs.deleted_at IS NULL AND cs.case_status NOT IN ('New')
GROUP BY cs.case_status;
否則, WHERE
子句將外部聯接轉換為內部聯接。
像這樣更改您的查詢
SELECT COUNT(referrals.id) AS count_all, case_statuses.case_status AS counted
FROM "case_statuses" LEFT JOIN "referrals" ON "referrals"."case_status_id" = "case_statuses"."id" AND referrals.project_id = 1
WHERE "case_statuses"."deleted_at" IS NULL AND case_statuses.case_status NOT IN ('New')
GROUP BY case_statuses.case_status;
給定您的數據和預期結果,您只需要松開WHERE
子句。
SELECT COUNT(referrals.id) AS count_all, case_statuses.case_status AS counted
FROM case_statuses
LEFT OUTER JOIN referrals ON referrals.case_status_id = case_statuses.id
GROUP BY case_statuses.case_status;
有關詳情,請參見此小提琴 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.