Как найти все противоположные комбинации между двумя столбцами в SQL - PullRequest
1 голос
/ 25 мая 2019

Я создаю приложение для веб-знакомств, которое должно соответствовать пользователям и позволять им общаться друг с другом.

Я хочу выяснить, как найти все совпадения для конкретного пользователя.

Прямо сейчас у меня есть таблица с именем следует, которая имеет 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 ]

2 голосов
/ 25 мая 2019

Вы можете сделать это с самостоятельным соединением:

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

См. Демоверсию .Результаты:

| MatchUserID |
| ----------- |
| 2           |
| 4           |
2 голосов
/ 25 мая 2019

Возможно, самый простой способ - использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...