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
表达式将每对 A1
和 A2
值重新排列为 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 |
+-----+-----+
我有一个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
表达式将每对 A1
和 A2
值重新排列为 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 |
+-----+-----+