使用where子句左连接查询

时间:2013-06-21 20:46:40

标签: sql postgresql left-join

我有3张桌子: GroupPersonWorkoutGroupPerson的外键,PersonWorkout的外键。 我想选择某个组中所有人的列表,如果在该人的给定日期之间进行了锻炼,那么也可以获得持续时间,如果没有,则将其设为空。

不太确定如何编写SQL,我陷入了这样的困境:

SELECT Person.id, Person.firstName, Workout.duration 
FROM Person LEFT OUTER JOIN Workout 
ON Person.id = Workout.person_id 
WHERE Workout.start_date BETWEEN %s AND %s 
AND Person.group_id = %s

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

您的where子句正在撤消left join。当没有匹配时,start_date为NULL,这无法进行比较。

将条件移至on子句可解决此问题:

SELECT Person.id, Person.firstName, Workout.duration 
FROM Person LEFT OUTER JOIN Workout 
     ON Person.id = Workout.person_id and Workout.start_date BETWEEN %s AND %s 
where Person.group_id = %s