我有3张桌子:
Group
,Person
和Workout
。 Group
是Person
的外键,Person
是Workout
的外键。
我想选择某个组中所有人的列表,如果在该人的给定日期之间进行了锻炼,那么也可以获得持续时间,如果没有,则将其设为空。
不太确定如何编写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
有什么想法吗?
答案 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