多对多关系过滤器

Posted

技术标签:

【中文标题】多对多关系过滤器【英文标题】:Many to many relation filter 【发布时间】:2013-12-09 05:52:00 【问题描述】:

我有以下表格:

user (id, firstname, lastname)

follow (id, follower_id, following_id)

现在假设我们有 id 为 1、2、3、4、5 的用户

并且user_id = 1 已经关注用户 2 和 3。

现在我想写一个查询,给我user_id's 我没有关注(user_id = 1) 是(4 和 5)。

有人可以帮忙吗。

【问题讨论】:

您尝试过任何解决方案吗? 是的,我想说的最好的是得票最多的。 【参考方案1】:

应该这样做:

SELECT id FROM user 
WHERE 
    id NOT IN 
    (
        SELECT following_id 
        WHERE follower_id = 1 --(or you can use any user i, i used 1 to show an example)
    )

【讨论】:

【参考方案2】:
SELECT * FROM user_table
LEFT JOIN follow_table ON user_table.id = follow_table.following_id
WHERE follow_table.following_id IS NULL

【讨论】:

【参考方案3】:

试试这个:

SELECT * FROM user_table ut
LEFT JOIN follow_table ft ON ut.id = ft.following_id AND ft.follower_id = 1
WHERE ft.following_id IS NULL

【讨论】:

以上是关于多对多关系过滤器的主要内容,如果未能解决你的问题,请参考以下文章

过滤多对多关系thip

过滤多对多关系中的选择

用于多对多关系的 NSPredicate 过滤器

在Django中按关系字段过滤多对多关系

CoreData:使用 NSPredicate 过滤一对多对多关系(此处不允许错误对多键)

Django内联表单集通过另一个模型在多对多关系中过滤