给定一个主键为 的用户表id
,我有一个名为的外部表friends
,它只有两个字段 ( userid1, userid2
)。这允许我们在不同用户之间创建任何类型的关系(一对多、一对一等)。用户可以出现在任一列中,并且两列相等。IOW,每个关系一个条目。
我怎样才能拉出给定用户id
拥有的所有朋友。说 Jonny,有 3 个朋友,他的用户id
是16
……我的 sql 查询应该是这样的吗?
SELECT *
FROM db.users
JOIN db.friends
ON db.users.id = db.friends.userid1
AND db.users.id = 16
希望这很清楚。另外,如果可能的话,我可以从结果集中排除 Jonny 吗?
列出的这个查询为我提供了以下信息:
id name uuid birthday userid1 userid2
16 jonny ABCDEFGHIJKLMNOP 1967-04-27 01:00:00 1 2
16 jonny ABCDEFGHIJKLMNOP 1967-04-27 01:00:00 1 3
这很接近,除了我想要他的朋友,而不是强尼
谢谢大家,多亏了你们,我才开始工作。这是最终的工作查询。
SELECT *
FROM db.users
WHERE db.users.id IN
(
SELECT db.friends.userid2 as id FROM db.friends WHERE db.friends.userid1 = 16
union
SELECT db.friends.userid1 as id FROM db.friends WHERE db.friends.userid2 = 16
)
这给了我:
id name uuid birthday
2 robin ABCDEFGHIJKLMNOP 1967-04-27 01:00:00
3 gary ABCDEFGHIJKLMNOP 1967-04-27 01:00:00