繁体   English   中英

左联接,条件为右表

[英]Left Join with conditional on Right Table

我在为下面的问题弄清楚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

但这对我不起作用。我应该怎么做?

谢谢!

您需要做的就是将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM