MySQL LEFT JOIN只返回一行,右表上有where条件

时间:2015-02-22 14:58:27

标签: mysql sql

我有两个表,一个包含事件,第二个表的事件标记为由用户保存。

我需要全部这些事件,并让某个用户知道是否保存了某个事件。

为此我正在使用此SQL

SELECT event.id, saved.user_id
FROM event
LEFT JOIN saved on event.id = saved.event_id

然后我收到重复的事件,因为一个事件可能会被保存的表中的许多用户标记为保存。

因此我添加了where where条件

SELECT event.id, saved.user_id
FROM event
LEFT JOIN saved on event.id = saved.event_id
where saved.user_id = "71"

但令人惊讶的是,获得的结果只减少到一行,当时我期待成千上万,其中大多数使用saved.user_id为null,只有少数或只有一次使用saved.user_id = 71

理想情况下,我想在某个用户的saved.user_id列中输入true / false,例如:71

这里有什么问题?

1 个答案:

答案 0 :(得分:1)

变化:

LEFT JOIN saved on event.id = saved.event_id
where saved.user_id = "71"

要:

LEFT JOIN saved on event.id = saved.event_id
                   and saved.user_id = "71"

或者:

LEFT JOIN saved on event.id = saved.event_id
WHERE saved.user_id = "71" OR saved.user_id IS NULL

where子句过滤所有表中的数据,on子句只过滤右表中的行。