2015-05-27 58 views
1
的MySQL查询

假设我有如下表具有鲜明的对值

ID1 ID2 
1 a b 
2 b a 
3 c d 

我想是因为他们在本质上是相同的只是列逆转编写一个查询,其中相同的1和2行是回报,所以我写了下面的查询:

SELECT * 
FROM Likes A, Likes B 
WHERE A.ID2 = B.ID1 AND B.ID2 = A.ID1 

这将返回

ID1 ID2 
1 a b 
2 b a 

对我来说,下一步是重新只转第一个,即只返回不同的行,其中A.ID2 = B.ID1 AND B.ID2 = A.ID1

+0

你需要一个行号.... –

+0

我不会说这种情况。 –

回答

1

您可以在连接条件中引入范围比较,以将其限制为仅一行。

select l1.* 
    from likes l1 
    inner join likes l2 
     on l1.id1 = l2.id2 
     and l1.id2 = l2.id1 
     and l1.id1 < l2.id1 

这将选择具有按字母顺序排列的最低id1的行。除非你需要其他标准来选择哪一行返回?

+0

太棒了,这很有效。 – theamateurdataanalyst