postgresql - 根据关系选择不同的值

标签 postgresql select distinct postgresql-9.2

上下文:

给定一个存储用户关系信息的表,单个记录表示单向关系,即在记录列“”中,user_1 跟随 user_2 userid”是 user_1,“relateduserid”列是 user_2。如果存在第二条记录,其中用户列“userid”为 user_2,列“relateduserid”为 user_1,那么我们将考虑这两个“ friend ”,并且该关系(逻辑上)被视为双向。

编辑:所有用户信息都存储在单独的“用户”表中。

问题:

我希望获取单向关系的所有不同用户 ID(即,只有一条记录显示我的用户 ID 和我关注的人的用户 ID),其中相关用户 ID 不是给定的用户 ID。

我尝试了几次查询,但没有返回正确的结果,例如使用不同的用户 ID 返回表中的所有用户 ID。

select distinct userid from userRelTable where relateduserid <> 1234

最佳答案

给定两个表 user 和 userRelTable,我在 user 表中填充了六个用户,并在 userRelTable 中填充了六个关系。

ID  userid
-----------
1   user_1
2   user_2
3   user_3
4   user_4
5   user_5
6   user_6
ID  userid  relateduserid
-------------------------
1   user_1  user_2
2   user_2  user_1
3   user_2  user_3
4   user_3  user_1
5   user_4  user_6
6   user_5  user_6

Given the criteria, this query will give you all users that have neither a uni-directional or bi-directional relationship with 'user_2'

    select * from [user]
    where [user].userid
    not in
    (
        select userid from userRelTable
        where userRelTable.userid = 'user_2'
        or userRelTable.relateduserid = 'user_2'
    )
    and [user].userid 
    not in
    (
        select relateduserid from userRelTable
        where userRelTable.userid = 'user_2'
        or userRelTable.relateduserid = 'user_2'
    )

结果如下表:

ID  userid
-----------
4   user_4
5   user_5
6   user_6

唯一有问题的是 user_3。根据定义,user_3 不应出现在结果集中,因为与 ID #3 处的 user_2 存在单向关系。

关于postgresql - 根据关系选择不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26530872/

相关文章:

mysql查询输出投影仪和白板

mysql查询不同并排序

sql - 从 Postgres 中的子查询构造值的 ARRAY 并在 WHERE 子句中使用它

postgresql - SequelizeConnectionError 无法连接到数据库

postgresql - 根据传递给 PostgreSQL 函数的列名数组获取行值

python - Django CONN_MAX_AGE 失败与 postgresql max_connections

select - 通过实例名称Grails显示选择实例

mysql 选择更新

mysql - MySQL中可能存在或不存在的引用数据

mysql - 溶解第二个选择语句