左边加入条件右表

时间:2013-09-09 14:47:05

标签: mysql sql database join left-join

我无法找出sql以解决我的以下问题。我有两个这样的表:

+----------+------------+------------+
| event_id | event_name | event_date |
+----------+------------+------------+

+---------------+----------+---------+--------+
| attendance_id | event_id | user_id | status |
+---------------+----------+---------+--------+

我要做的是找到这样一个表:

+----------+--------+
| event_id | status |
+----------+--------+

第二个出勤表的条件是user_id。我正在尝试获取所有事件的列表以及每个事件的用户状态,即使出席时没有记录(现在NULL也可以)。同样,来自考勤表的状态数据需要由user_id选择。

从我最初的研究中,我认为这样可行:

SELECT event_id, status FROM events LEFT JOIN attendance WHERE attendance.user_id='someoutsideinput' ORDER BY event_date ASC

但这对我来说并不像预期的那样。我应该怎么做呢?

谢谢!

2 个答案:

答案 0 :(得分:5)

您需要做的就是将WHERE子句中的条件移动到ON子句中。

SELECT events.event_id, COALESCE(attendance.status, 0) status
FROM events LEFT JOIN attendance
     ON events.event_id = attendance.event_id AND
        attendance.user_id='someoutsideinput'
ORDER BY events.event_date ASC

答案 1 :(得分:1)

您需要将更多条件添加到JOIN子句而不是WHERE子句。

顺便说一下,你没有在表格之间指定连接标准,我也在下面更正了。

SELECT E.event_id
        ,A.status 
FROM    events E
LEFT JOIN 
        attendance A
ON      E.event_id = A.event_id
AND     A.user_id='someoutsideinput' 
ORDER BY 
        E.event_date ASC