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