2011-10-14 62 views
6

我有一個表likes,凡ID1喜歡ID2共同的朋友列中,選擇一對只有一次

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

,所以我選擇那些誰喜歡對方,也就是例如

1501 1934 
1934 1501 

但我只想選擇一對,而我無法做到這一點。任何人都可以將我指向正確的方向嗎?它是一個更大的查詢的一部分,但這部分我無法做到。

感謝

回答

6

要獲得所有投桃報李喜歡的一個獨特的列表,你可以使用

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) 
+0

好的解決方案。我也可能會嘗試清理表格並導致將來的插入始終使ID1

+0

@TomH - 是的。當然不能保證,因爲A喜歡B,相反也是如此。 –

+0

非常感謝,我不得不修改它以適應我的解決方案,但這工作:) – Pheonix

0
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) 
0

修復數據:

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

...然後修復泄漏將數據完整性約束添加到表中

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

你忘了一步。修復應用程序,以便每次嘗試將ID插入錯誤的列時都不會出錯。 –

0
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