我正在尝试编写一个涉及两个表的简单查询。 “person”表具有唯一的 person_id
和 name
,“friends”表具有 person_id
和 friend_id
,它们是 person 表中 person_id
的 FK。
person:
<PK> int person_id
varchar[45] name
friends:
<PK> int person_id
<PK> int friend_id
我想选择第 1 个人的所有 friend 的名字。
我可以使用
IN
语句轻松完成此操作:SELECT p.name FROM person p WHERE p.person_id IN (SELECT f.friend_id FROM friends f WHERE f.person_id = 1);
但是,我不擅长编写
JOIN
语句。有人可以帮我编写等效的连接吗?显然,这是一个人为的例子,但我已经尝试过使用我的真实数据并且在概念上遗漏了一些东西。谢谢。
最佳答案
你想要这样的东西:
SELECT p.name, f.friend_id
FROM person AS p
INNER JOIN friends AS f ON p.person_id = f.person_id
WHERE p.person_id = 1
这使用
p.person_id = f.person_id
将两个表连接在一起如果一个人没有 friend ,你不会得到任何行 - 如果你不想要这个,那么使用 LEFT JOIN 你会得到一行 NULL
friend_id
。编辑:如果你想加入 friend 回到人:
SELECT p.name AS person_name, friend.name AS friend_name
FROM person AS p -- Our person
INNER JOIN friends AS f ON p.person_id = f.person_id -- the join table
INNER JOIN person AS friend on f.friend_id = friend.id -- Join back on person again
WHERE p.person_id = 1
也许您的应用程序需要像这样的 3 向连接,但更常见的是,您只需要如上所述的 2 向连接,或者像这样:
SELECT p.name, f.friend_id
FROM person AS p
INNER JOIN friends AS f ON p.person_id = f.friend_id
WHERE f.person_id = 1
这将为您提供所有与 person_id 1 是 friend 的人的姓名(但不是 person_id 1 的姓名)
关于SQL JOIN 查询写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/334852/