开发者

Mutual Friend column, select a pair only once

I have a table likes, Where ID1 likes ID2

ID1     ID2
1025    1101
1247    1468
1316    1304
1501    1934
1641    1468
1689    1709
1709    1689
1782    1709
1911    1247
1934    1501

so i am select those who like each other, that is example

1501 1934
1934 1501

But i want to select each pair only once, and i am not able to do it. Can anyone point me in the right direction ? its a part of a bigger query, but this par开发者_运维百科t i am not able to do.

Thanks


To get a distinct list of all reciprocated likes you can use

SELECT ID1,
       ID2
FROM   likes L1
WHERE  ID1 > ID2
       AND EXISTS(SELECT *
                  FROM   likes L2
                  WHERE  L1.ID1 = L2.ID2
                         AND L1.ID2 = L2.ID1)  


select
     L1.ID1, L1.ID2
from likes L1
where exists 
     (select 1
      from likes L2
      where L1.ID1 = L2.ID2 and L1.ID2 = L2.ID1)


Fix the data:

SELECT ID1, ID2
  FROM likes
 WHERE ID1 < ID2
UNION
SELECT ID2 AS ID1, ID1 AS ID2
  FROM likes
 WHERE ID1 > ID2;

...then fix the leak by adding data integrity constraints to the table e.g.

CREATE TABLE likes 
(
 ID1 INTEGER NOT NULL, 
 ID2 INTEGER NOT NULL, 
 CHECK (ID1 < ID2),
 UNIQUE (ID1, ID2)
);


SELECT L1.ID1, L1.ID2 FROM Likes L1, Likes L2 
WHERE L1.ID1=L2.ID2 AND L1.ID2=L2.ID1 AND L1.ID1>L1.ID2
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜