Select 不同的列值对

Select Distinct pair of column values

我有一个table这样的

A1 | A2
a  | b
c  | d
b  | a
a  | b

我想要 select 个不同的对:

A1 | A2
a  | b
c  | d

我试过了:

select a, b from (
select a, b , a|b as ab, b|a as ba from T
)t where ab!=ba group by a, b

有人知道我该怎么做吗? 谢谢

一种符合 ANSI 标准的方法是使用 CASE 表达式将每对 A1A2 值重新排列为 min/max。然后 select 在这个派生的 table.

上不同
SELECT DISTINCT
    A1, A2
FROM
(
    SELECT
        CASE WHEN A1 < A2 THEN A1 ELSE A2 END AS A1,
        CASE WHEN A1 < A2 THEN A2 ELSE A1 END AS A2
    FROM yourTable
) t

如果不涉及 NULL 值,这将是最干净的方法

select  distinct
        least    (A1,A2) as A1
       ,greatest (A1,A2) as A2

from    t
;

+-----+-----+
| a1  | a2  |
+-----+-----+
| a   | b   |
| c   | d   |
+-----+-----+