上下文:
给定一个存储用户关系信息的表,单个记录表示单向关系,即在记录列“”中,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/