簡體   English   中英

1個聯接和2個子句不返回所有記錄的Sql查詢

[英]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.

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