Получить все записи, когда похожи друг на друга присоединиться к запросу - PullRequest
0 голосов
/ 31 марта 2020

У меня есть одна регистрация таблицы

registration table
+------+------+
|ARIDNR|LIEFNR|
+------+------+
|1     |A     |
+------+------+
|2     |B     |
+------+------+
|3     |C     |
+------+------+

UserLike Table
+------+------+
|ARIDNR|LIEFNR|
+------+------+
|A     |B     |
+------+------+
|B     |A     |
+------+------+
|A     |C     |
+------+------+

Я хотел бы выбрать запрос на соединение с пользовательской таблицей, чтобы эти значения возвращали true, когда оба пользователя похожи друг на друга

Пример

Пользователь A похож на пользователя B Также пользователь B похож на пользователя A

, поэтому в ответе пользователя B я получаю значение true

, в этом случае пользователь A похож на пользователя C, но пользователь C не похоже на пользователя A в этом случае возвращает false

Я хочу вывод, как показано ниже

Результат

{
“username”:B
“match”:true    
},
{
“username”:C
“match”:false   
}

1 Ответ

0 голосов
/ 31 марта 2020

Предполагая, что теперь дубликаты, вы можете сделать:

select least(ARIDNR, LIEFNR), greatest(ARIDNR, LIEFNR)
from userlike
group by least(ARIDNR, LIEFNR), greatest(ARIDNR, LIEFNR)
having count(*) = 2;

Или, более эффективно (с правильными индексами), как:

select ul.*
from userlike ul
where ul.ARIDNR < ul.LIEFNR and
      exists (select 1
              from userlike ul2
              where ul2.ARIDNR = ul.LIEFNR and
                    ul2.LIEFNR = ul.ARIDNR
             );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...