SELECT DISTINCT对列的值

问题描述:

我有这样SELECT DISTINCT对列的值

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

一个表,我要选择不同的对:

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 

任何人都有一个有关我如何做到这一点的更好的想法? 谢谢

+1

标签的DBMS(MySQL和MS SQL Server中,ORCLE等),其中U [R使用。 –

+0

数据示例头与您尝试的查询之间没有关联。 –

符合ANSI标准的方法是使用CASE表达式将每对A1A2值重新排列为最小/最大值。然后,只需在此派生表上选择不同。

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 
+0

第二个'CASE'语句不应该是'A2 Tony

+0

@Tony是的,你也可以这样写,但是你也必须在谓词中切换'A1'和'A2'。 –

+0

啊是的,我明白了,对不起 – Tony

这将是最干净的方式,如果NULL值不参与

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

from t 
; 

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