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

时间:2019-05-25 14:59:54

标签: mysql sql

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

我想弄清楚如何查找特定用户的所有匹配项。

现在我有一个名为follow的表,该表具有2列。

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)
);

2 个答案:

答案 0 :(得分:2)

最简单的方法可能是使用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);

答案 1 :(得分:2)

您可以通过自我加入来实现:

select m.MatchUserID
from `Match` m inner join `Match` mm
on mm.MatchUserID = m.UserId
where 
  m.UserId = 1
  and 
  m.MatchUserID = mm.UserId

请参见demo
结果:

| MatchUserID |
| ----------- |
| 2           |
| 4           |