1

我在找出我的以下问题的 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

但这并不像预期的那样对我有用..我应该怎么做?

谢谢!

4

2 回答 2

6

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

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
于 2013-09-09T14:49:08.027 回答
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
于 2013-09-09T14:51:07.640 回答