创建表对(编号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
答案 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
我不确定哪些查询可能是最快的。