我有 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
有什么想法吗?
最佳答案
您的 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
关于sql - 带 where 子句的 Left Join 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17244047/