排除mysql查询结果的结果
问题描述:
感谢您的阅读。排除mysql查询结果的结果
我有两个sql表。组和组__成员
组表具有组详细信息。例如:
group_id - group_name
1 music
2 video
3 funny
而且组员有订阅用户。例如
id - group_id - user_id
1 1 5
2 3 8
用户5是音乐的成员,用户8是有趣的成员。我想向用户展示他还没有订阅的群组。在这种情况下,它应该的视频和滑稽的用户5
我想这
SELECT gr.*, gm.* FROM groups gr
LEFT JOIN groupmembers gm
ON gm.group_id = gr.group_id
WHERE gm.user_id != 5
但它显示了一切,复制某些行。我甚至不确定应该使用LEFT JOIN还是其他的。
什么是正确的方法呢?
谢谢!
答
SELECT gr.group_name
FROM groups gr
WHERE gr.group_id NOT IN (
SELECT gm.group_id
FROM groupmembers gm
WHERE gm.user_id = 5
)
应该这样做,基本上抓住所有的群组ID的用户所属,然后做一个NOT IN
将它们排除在外。你可以用JOIN
做到这一点,但在我看来这更具可读性。
答
您只是在查询中缺少一个条件(OR gm.user_id IS NULL
)。
SELECT gr.group_name FROM groups gr
LEFT JOIN groupmembers gm
ON gm.group_id = gr.group_id
WHERE gm.user_id != 5 OR gm.user_id IS NULL;
谢谢!有用。所以,我基本上使用NOT IN。谢谢。 –