выберите строку, в которой column2 не равно column1 - PullRequest
1 голос
/ 07 ноября 2011

Мне нужна помощь с SQL-запросом

У меня есть эта таблица

likes
 friend    friend2
      1          2
      2          1
      3          1
      4          5

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

С моим текущим выбором я получаю это

 id     name         id     name
1709    Cassandra    1689   Gabriel 
1689    Gabriel      1709   Cassandra
1501    Jessica      1934   Kyle    
1934    Kyle         1501   Jessica 

, но ожидаемый результат запроса:

 id     name        id     name
1709    Cassandra   1689    Gabriel 
1501    Jessica     1934    Kyle    

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

Попробуйте что-то вроде этого:

select *
from
(
    select
        case
            when id1 > id2 then id2
            when id1 < id2 then id1
        end as Friend1,
        case
            when id1 < id2 then id2
            when id1 > id2 then id1
        end as Friend2
    from TestMatching
) a
group by Friend1, Friend2

Что здесь происходит, так это то, что он использует подзапрос, а подзапрос - это всего лишь пара CASE блоков для упорядочения дружбы. И затем это делает группу, чтобы создать сводку дружеских отношений. Если бы вы хотели увидеть, какие друзья ОБА оба пути, то вы бы сделали что-то вроде этого:

select *
from
(
    select
        case
            when id1 > id2 then id2
            when id1 < id2 then id1
        end as Friend1,
        case
            when id1 < id2 then id2
            when id1 > id2 then id1
        end as Friend2
    from TestMatching
) a
group by Friend1, Friend2
having COUNT(*) > 1    -- this is the added clause to get consenting friends

Результатом запроса являются все друзья, которые дружат друг с другом.

1 голос
/ 07 ноября 2011

Если вы уверены, что каждая пара введена в базу данных дважды (один раз как A, B и снова как B, A), то вы можете использовать это:

 SELECT friend, friend2
 FROM yourtable
 WHERE friend < friend2

Если может быть несколько паркоторые вводятся только один раз, то вы можете использовать это:

 SELECT DISTINCT
     LEAST(friend, friend2) AS friend,
     GREATEST(friend, friend2) AS friend2
 FROM yourtable
...