[英]Sql Query with 1 Join and 2 Where Clauses not returning all records
So guys, trying to write a query to get the count of statuses where project_id = ? 伙计们,尝试编写查询以获取project_id =吗? and statuses in 'New' from a couple of tables so let me break it down.
以及来自几个表格的“新”中的状态,所以让我细分一下。
I have these three tables 我有这三张桌子
Case_Status 案例状态
id case_status
1 New
2 Failed
3. Accepted
Referral 转介
id case_status_id project_id application_id
1 1 1 20
2 2 1 21
Project 项目
id name
1 project1
2 project2
So this is my query 这是我的查询
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;
This is my result 这是我的结果
count_all counted
1 New
1 Failed
But I am expecting this result instead 但是我期望这个结果
count_all counted
1 New
1 Failed
0 Accepted
Does anyone know what's wrong with my query that isnt showing count for all the case_statuses? 有谁知道我的查询出了什么问题,该查询未显示所有case_statuses的计数?
Thanks 谢谢
Conditions on the second table (in a left join
) should be in the on
clause: 第二个表的条件(在
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;
Otherwise, the WHERE
clause turns the outer join into an inner join. 否则,
WHERE
子句将外部联接转换为内部联接。
change your query like this 像这样更改您的查询
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;
Given your data and the expected result you just need to loose the WHERE
clause. 给定您的数据和预期结果,您只需要松开
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.