我有两个表,一个包含事件,第二个表的事件标记为由用户保存。
我需要全部这些事件,并让某个用户知道是否保存了某个事件。
为此我正在使用此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
这里有什么问题?
答案 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
子句只过滤右表中的行。