创建表对(数字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
xzabzqsa1#
我认为这是最简单的解决办法。如果可以保证没有重复对,那么 GROUP BY 不需要。
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
我不确定这些查询中哪一个可能是最快的。
cnwbcb6i2#
你可以在这里使用最小/最大的技巧:
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 ,因此,根据查询中的逻辑,这两个对将被报告为同一事物。我们还可以将其收紧到以下程度:
(1, 2)
(2, 1)
1
2
SELECT DISTINCT LEAST(a, b), GREATEST(a, b) FROM yourTable WHERE a <> b;
注意:如果你想返回一对在哪里 a = b ,然后卸下 WHERE 条款。
a = b
WHERE
4si2a6ki3#
SELECT sub.output FROM ( SELECT CONCAT(a,b, ' or ', b,a ) output, ASCII(a)+ASCII(b) asci FROM tbl_t1 WHERE a!=b ) sub GROUP BY sub.asci;
3条答案
按热度按时间xzabzqsa1#
我认为这是最简单的解决办法。如果可以保证没有重复对,那么
GROUP BY
不需要。输出:
你可以随时改变主意
<
至>
如果需要备用输出:正如@timbiegeleisen所指出的,它甚至可以进一步简化为
我不确定这些查询中哪一个可能是最快的。
cnwbcb6i2#
你可以在这里使用最小/最大的技巧:
要了解为什么这样做,请考虑这两对
(1, 2)
以及(2, 1)
. 在这两种情况下,最小的决定1
最棒的是2
,因此,根据查询中的逻辑,这两个对将被报告为同一事物。我们还可以将其收紧到以下程度:
注意:如果你想返回一对在哪里
a = b
,然后卸下WHERE
条款。4si2a6ki3#