Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在SQL中查找两列之间的所有相反组合_Mysql_Sql - Fatal编程技术网

Mysql 如何在SQL中查找两列之间的所有相反组合

Mysql 如何在SQL中查找两列之间的所有相反组合,mysql,sql,Mysql,Sql,我正在制作一个网络约会应用程序,需要匹配用户并让他们彼此聊天 我想找出如何找到特定用户的所有匹配项 现在我有一个名为follows的表,它有两列 UserID | MatchUserID -------------------- 1 | 2 2 | 1 1 | 3 1 | 4 1 | 5 4 | 1 5 | 4 这个想法是,两个用户要匹配,他们需要互相跟随。上表显示了哪个用户遵循哪个 假设当前登录的用户是Use

我正在制作一个网络约会应用程序,需要匹配用户并让他们彼此聊天

我想找出如何找到特定用户的所有匹配项

现在我有一个名为follows的表,它有两列

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吗?这将给出所有相互匹配的组合,然后过滤到您想要的特定用户。