1

所以这是我的桌子

|a_id|b_id|
|x   |y   |
|y   |x   |
|d   |c   |
|c   |d   |
|... |... |

还有很多...

获得所有配对的最佳方法是什么?例如从上面的例子 (x 和 y) 和 (d 和 c)

我从来没有使用过没有特定 id 的 sql

4

3 回答 3

3
select  t1.a_id
,       t1.b_id
from    YourTable t1
join    YourTable t2
on      t1.a_id = t2.b_id
        and t1.b_id = t2.a_id
where   t1.a_id > t2.a_id

SQL Fiddle 上的示例。

于 2013-03-29T15:50:55.543 回答
2
SELECT a_id, b_id
FROM   TableName
WHERE  (LEAST(a_id, b_id), GREATEST(a_id, b_id), a_id) in 
(
    SELECT  LEAST(a_id, b_id) as x, 
            GREATEST(a_id, b_id) as y, 
            MIN(a_id) as a_id
    FROM    TableName 
    GROUP   BY x, y
)
于 2013-03-29T15:48:21.600 回答
0

可以更简单:

SELECT LEAST(a_id, b_id) AS a, GREATEST(a_id, b_id) AS b 
FROM   tbl
GROUP  BY 1, 2;

SQL 小提琴

于 2013-03-29T15:59:34.490 回答