MySQL-如何比较两个表之间的公共值
我有两张桌子 表MySQL-如何比较两个表之间的公共值,mysql,sql,Mysql,Sql,我有两张桌子 表FRIENDS-列/值 身份证,朋友身份证,朋友姓名 1,34,达蒙 1,17,RICHARD 1,56,丹尼尔 1,65,查理 2,15,普里西拉 2,17,RICHARD 2,45,约翰 2,56,丹尼尔 表用户-列/值 用户ID、名称 1、初级 2,萨曼莎 15,普里西拉 45,约翰 56,丹尼尔 如何执行选择查询表FRIENDSwhereFRIENDS.USER\u ID=X中的所有行,并与表USERS中的所有行进行交叉引用,其中FRIENDS.FRIENDS\u ID=
FRIENDS
-列/值
身份证,朋友身份证,朋友姓名
1,34,达蒙
1,17,RICHARD
1,56,丹尼尔
1,65,查理
2,15,普里西拉
2,17,RICHARD
2,45,约翰
2,56,丹尼尔
表用户
-列/值
用户ID、名称
1、初级
2,萨曼莎
15,普里西拉
45,约翰
56,丹尼尔
如何执行选择
查询表FRIENDS
whereFRIENDS.USER\u ID=X
中的所有行,并与表USERS
中的所有行进行交叉引用,其中FRIENDS.FRIENDS\u ID=USERS.USER\u ID
基本上,我想查询一个用户的所有朋友(从表朋友
,由朋友id
标识),这些朋友也存在于表用户
(如果他们存在于表f朋友.朋友id
=用户.用户id
)中
很抱歉英语不好,这不是我的母语。第一个解决方案:使用加入
SELECT f.*
FROM friends f JOIN users u ON u.USER_ID = f.FRIEND_ID
AND u.USER_ID = '?'
第二种解决方案:使用存在
SELECT f.*
FROM friends f
WHERE EXISTS (SELECT *
FROM users
WHERE USER_ID = f.FRIEND_ID
AND USER_ID = '?')
这种“交叉”数据被恰当地命名为“连接”。连接有不同的风格,但对您来说,一个简单的“内部”连接就足够了:
SELECT
f.*
FROM
FRIENDS f
JOIN
USERS u
ON
r.FRIEND_ID = u.USER_ID
WHERE
f.FRIEND_ID = ...
它被称为JOIN
。它工作得很好,就像我希望将最后一个子句更改为f.id一样,它在使用左连接时也工作得很好,这样我就可以识别哪些用户不在表中,这也是我需要的,对于MySQL,我有点不知所措,谢谢你的帮助。