Postgres Запрос на выбор значения на основе двух разных строк - PullRequest
0 голосов
/ 12 июля 2020

Итак, я делаю приложение для знакомств, я сохраняю пользовательские смахивания в таблице смахиваний.

Каждое смахивание - это строка. Я хотел бы получить запрос, который вернул бы все совпадения для определенного пользователя c.

Пример: Пользователь 1 провел пальцем по пользователю 2, столбец владельца будет содержать идентификатор 1 и целевой идентификатор 2. Если пользователь 2 проведет пальцем по пользователь 1 будет еще одна строка, где пользователь 2 является владельцем, а 1 - целью.

Поскольку оба пользователя пролистали друг друга, они совпали. Мне понадобится запрос, чтобы найти все совпадения для определенного идентификатора пользователя

Как я могу go сделать это?

+-------+--------+
| owner | target |
+-------+--------+
| A     | B      |
+-------+--------+
| B     | A      |
+-------+--------+
| C     | X      |
+-------+--------+
| D     | E      |
+-------+--------+
| E     | Y      |
+-------+--------+

Если приведенная выше структура вашей таблицы, в приведенном выше случай A и B совпадают.

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Вы можете использовать условие EXISTS

select t1.owner, t1.target
from the_table t1
where exists (select *
              the_table t2
              where t1.owner = t2.target
                and t1.target = t2.owner);
0 голосов
/ 13 июля 2020

Другой вариант - самостоятельное соединение.

select s1.owner  
     , s1.target
   from swipe s1 
   join swipe s2 
     on (    s2.owner = s1.target
         and s1.owner = s2.target
        ) 
  order by s1.owner; 

Это даст 2 строки для каждого набора. С этими конкретными данными (A с B) и (B с A). Если вам нужна только одна комбинация наборов, добавьте предложение where, чтобы удалить 1 из них.

select s1.owner  
     , s1.target
   from swipe s1 
   join swipe s2 
     on (    s2.owner = s1.target
         and s1.owner = s2.target
        ) 
  where s1.owner < s2.owner
  order by s1.owner;        
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...