查询以查找唯一的数字对

时间:2018-05-09 11:15:52

标签: mysql mysql-workbench

创建表对(编号a,编号b)

数据在哪里

1,1
1,2
1,3
2,1
2,2
2,3
3,1
3,2
3,3

什么查询给了我独特的对? 我的意思是:

1,2 or 2,1
1,3    3,1
2,3    3,2

2 个答案:

答案 0 :(得分:1)

您可以在这里使用最少/最大的技巧:

SELECT
    LEAST(a, b), GREATEST(a, b)
FROM yourTable
WHERE a <> b
GROUP BY
    LEAST(a, b), GREATEST(a, b);

要了解其工作原理,请考虑两对(1, 2)(2, 1)。在这两种情况下,最少解析为1,最大解析为2,因此根据我的查询中的逻辑,两个对将被报告为相同的事物。

我们还可以将其收紧到以下几点:

SELECT DISTINCT LEAST(a, b), GREATEST(a, b)
FROM yourTable
WHERE a <> b;

注意:如果要返回a = b的对,请删除WHERE子句。

答案 1 :(得分:0)

我认为这是最简单的解决方案。如果可以保证没有重复的对,则不需要GROUP BY

SELECT a, b 
FROM pairs
WHERE a < b
GROUP BY a, b

输出:

a   b   
1   2
1   3
2   3

如果您想要备用输出,可以随时将<更改为>

a   b   
2   1
3   1
3   2

正如@TimBiegeleisen指出的,它甚至可以进一步简化为

SELECT DISTINCT a, b 
FROM pairs
WHERE a < b

我不确定哪些查询可能是最快的。