我正在尝试编写一个涉及两个表的简单查询。 “人”表有其独特之处person_id
and a name
,“朋友”表有一个person_id
and a friend_id
这是一个 FK 到person_id
在人员表中。
person:
<PK> int person_id
varchar[45] name
friends:
<PK> int person_id
<PK> int friend_id
我想选择人员 1 的所有朋友的名字。
我可以使用一个轻松地做到这一点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
如果一个人没有朋友,您将不会得到任何行 - 如果您不想这样做,那么使用 LEFT JOIN,您将得到一行带有 NULL 的行friend_id
.
编辑:如果您想重新加入朋友:
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 成为朋友的所有人员的姓名(但不是 person_id 1 的姓名)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)