0

我有 3 个表 GroupPersonWorkoutGroup是 的外键PersonPerson是 的外键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

有任何想法吗?

4

1 回答 1

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
于 2013-06-21T20:48:35.587 回答