繁体   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