Mysql 如何在SQL中查找两列之间的所有相反组合
我正在制作一个网络约会应用程序,需要匹配用户并让他们彼此聊天 我想找出如何找到特定用户的所有匹配项 现在我有一个名为follows的表,它有两列Mysql 如何在SQL中查找两列之间的所有相反组合,mysql,sql,Mysql,Sql,我正在制作一个网络约会应用程序,需要匹配用户并让他们彼此聊天 我想找出如何找到特定用户的所有匹配项 现在我有一个名为follows的表,它有两列 UserID | MatchUserID -------------------- 1 | 2 2 | 1 1 | 3 1 | 4 1 | 5 4 | 1 5 | 4 这个想法是,两个用户要匹配,他们需要互相跟随。上表显示了哪个用户遵循哪个 假设当前登录的用户是Use
UserID | MatchUserID
--------------------
1 | 2
2 | 1
1 | 3
1 | 4
1 | 5
4 | 1
5 | 4
这个想法是,两个用户要匹配,他们需要互相跟随。上表显示了哪个用户遵循哪个
假设当前登录的用户是UserID=1。
我需要一个查询,该查询将从MatchUserID表返回以下结果:
2,4
在某种程度上,我希望找到两列之间所有相反的组合
这是我用来创建表的代码
CREATE TABLE Match
(
UserID INT NOT NULL,
MatchUserID INT NOT NULL,
PRIMARY KEY (UserID, MatchUserID)
);
最简单的方法可能是使用EXISTS和一个相关子查询来搜索另一个匹配项
SELECT t1.matchuserid
FROM elbat t1
WHERE t1.userid = 1
AND EXISTS (SELECT *
FROM elbat t2
WHERE t2.matchuserid = t1.userid
AND t2.userid = t1.matchuserid);
最简单的方法可能是使用EXISTS和一个相关子查询来搜索另一个匹配项
SELECT t1.matchuserid
FROM elbat t1
WHERE t1.userid = 1
AND EXISTS (SELECT *
FROM elbat t2
WHERE t2.matchuserid = t1.userid
AND t2.userid = t1.matchuserid);
您可以通过自连接来完成此操作:
select m.MatchUserID
from `Match` m inner join `Match` mm
on mm.MatchUserID = m.UserId
where
m.UserId = 1
and
m.MatchUserID = mm.UserId
看。
结果:
您可以通过自连接来完成此操作:
select m.MatchUserID
from `Match` m inner join `Match` mm
on mm.MatchUserID = m.UserId
where
m.UserId = 1
and
m.MatchUserID = mm.UserId
看。
结果:
这不是一个简单的自连接,将left.UserId连接到right.MatchId,将left.MatchId连接到right.UserId吗?这将给出所有相互匹配的组合,然后过滤到您想要的特定用户。这不是一个简单的自连接,将left.UserId连接到right.MatchId,并将left.MatchId连接到right.UserId吗?这将给出所有相互匹配的组合,然后过滤到您想要的特定用户。