选择column2不等于column1的行

时间:2011-11-07 01:02:31

标签: sql database relational-database

我需要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 个答案:

答案 0 :(得分:1)

如果您确定每对都在数据库中输入两次(一次为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

答案 1 :(得分:1)

尝试这样的事情:

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

结果查询是所有互相朋友的朋友。