簡體   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