谢谢你的阅读。
我有两个sql表。组和组成员
groups表具有组详细信息。例如:

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来做,但在我看来这更容易阅读。

关于mysql - 从mysql查询结果中排除结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19413394/

10-10 14:32