sql - 带 where 子句的 Left Join 查询

标签 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

有什么想法吗?

最佳答案

您的 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/

相关文章:

php - mysql:分组并获取最新记录

database - 在 Grails 中映射遗留数据库表时,如何映射两个表而不进行任何更改?

sql - HANA:如何在 RAND() 函数上设置种子?

Postgresql pg_standby 需要永远执行故障转移

postgresql - Azure 灵活 Postgres : `permission denied for table pg_authid` diring `pg_dumpall -r`

python - PySpark - 按时间间隔连接数据帧

mysql - 将产品属性表与产品表连接起来以显示产品

MySQL 多个左连接在一张表上

mysql - SQL——多对多查询

2 个表的 SQL 查询百分比