从表中选择all甚至为null并加入

时间:2014-10-24 21:33:29

标签: php mysql sql

我想从会议表中选择所有行,即使它是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

1 个答案:

答案 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子句中,它实际上会完全否定外连接。