我想从会议表中选择所有行,即使它是null。我的表结构:
attandance table:
id | meeting_id | person_id | time
1 | 1 | 12 | 02:02
2 | 1 | 15 | 02:05
3 | 1 | 22 | 02:05
4 | 2 | 1 | 02:20
5 | 2 | 12 | 02:01
6 | 3 | 12 | 02:03
and meeting table:
id | date
1 | 15-12-2014
2 | 17-12-2014
3 | 19-12-2014
4 | 21-12-2014
输出应为:
如果我选择person_id 12,那么它应该返回:
date |time
15-12-2014 | 02:02
17-12-2014 | 02:01
19-12-2014 | 02:03
21-12-2014 | NULL
如果我选择person_id 1,那么它应该返回:
date |time
15-12-2014 | NULL
17-12-2014 | 02:20
19-12-2014 | NULL
21-12-2014 | NULL
答案 0 :(得分:3)
这是表之间非常简单的外部联接:
select
m.id,
m.date
a.time,
c.someColumn
from
meetings m
left outer join attendance a
on m.id=a.meeting_id
and a.person_id=:person
left outer join someTable c
on m.id=c.id
我在问答中对这些类型的连接写了更详细的答案:How can an SQL query return data from multiple tables
编辑:根据Andrew的评论,personID的子句在连接中而不是在普通的where子句中,因为它是外连接。如果条件正常地放入where子句中,它实际上会完全否定外连接。