Mysql 右表上带条件的左联接
我很难为下面的问题找到sql。我有两张这样的桌子:Mysql 右表上带条件的左联接,mysql,sql,database,join,left-join,Mysql,Sql,Database,Join,Left Join,我很难为下面的问题找到sql。我有两张这样的桌子: +----------+------------+------------+ | event_id | event_name | event_date | +----------+------------+------------+ +---------------+----------+---------+--------+ | attendance_id | event_id | user_id | status | +---------
+----------+------------+------------+
| event_id | event_name | event_date |
+----------+------------+------------+
+---------------+----------+---------+--------+
| attendance_id | event_id | user_id | status |
+---------------+----------+---------+--------+
+----------+--------+
| event_id | status |
+----------+--------+
我想做的是得到一张这样的桌子:
+----------+------------+------------+
| event_id | event_name | event_date |
+----------+------------+------------+
+---------------+----------+---------+--------+
| attendance_id | event_id | user_id | status |
+---------------+----------+---------+--------+
+----------+--------+
| event_id | status |
+----------+--------+
其中,第二个考勤表的条件是用户id。我正在尝试获取所有事件的列表以及这些事件中每个事件的用户状态,即使考勤表中没有记录(现在可以为NULL)。同样,考勤表中的状态数据需要由用户id选择
根据我最初的研究,我认为这会奏效:
SELECT event_id, status FROM events LEFT JOIN attendance WHERE attendance.user_id='someoutsideinput' ORDER BY event_date ASC
但这对我来说并不像预期的那样有效..我该怎么做呢
谢谢 您需要做的就是将
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
您需要做的就是将
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
您需要在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
您需要在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
非常感谢。还只是想知道,我是否有办法在返回NULL时用0替换NULL?使用,
COALESCE()
,例如COALESCE(attention.status,0)status
谢谢!还只是想知道,我是否有办法在返回NULL时用0替换NULL?使用,COALESCE()
,例如COALESCE(attention.status,0)status