Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 右表上带条件的左联接_Mysql_Sql_Database_Join_Left Join - Fatal编程技术网

Mysql 右表上带条件的左联接

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 | +---------

我很难为下面的问题找到sql。我有两张这样的桌子:

+----------+------------+------------+
| 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