SQL连接子查询where条件

时间:2017-07-05 22:24:48

标签: sql postgresql

如何有效地子查询LEFT OUTER JOIN,以便只包含满足连接中特定条件的行?

我想只计算PPPD的converted_at IS NULL。但是当我添加PPPD.converted_at IS NULL时,结果比我想要的更有限,因为它只包含在converted_at中有一行null的patient_profiles。相反,我想要计算所有具有converted_at = null

的PPPD记录
SELECT P.id, P.gender, P.dob, 
count(distinct recommendations.id) AS recommendation_count,
count(distinct PPPD.id) AS community_submissions,
FROM patient_profiles AS P
LEFT OUTER JOIN recommendations ON recommendations.patient_profile_id = P.id
LEFT OUTER JOIN patient_profile_potential_doctors AS PPPD ON PPPD.patient_profile_id = P.id
WHERE P.is_test = FALSE
GROUP BY P.id

1 个答案:

答案 0 :(得分:2)

您需要在ON子句中添加条件:

SELECT P.id, P.gender, P.dob, 
       count(distinct r.id) AS recommendation_count,
       count(distinct PPPD.id) AS community_submissions,
FROM patient_profiles  P LEFT OUTER JOIN
     recommendations r
     ON r.patient_profile_id = P.id LEFT OUTER JOIN
     patient_profile_potential_doctors PPPD
     ON PPPD.patient_profile_id = P.id AND PPPD.converted_at IS NULL
WHERE P.is_test = FALSE;
GROUP BY P.id