繁体   English   中英

根据表中的多列选择不同的值

[英]Select distinct values based on multiple column from table

我在虚拟桌子下面

select * from (
select 'A' as col1, 'B' as col2 from dual 
union
select 'B' as col1, 'A' as col2 from dual 
union
select 'A' as col1, 'C' as col2 from dual 
union
select 'C' as col1, 'A' as col2 from dual 
union
select 'A' as col1, 'D' as col2 from dual 
)a

这将给出如下输出

col1 col2
A   B
A   C
A   D
B   A
C   A

我想从该表中找到不同的值,如下所示

col1 col2
A    B
A    C
A    D

第一行可以是AB或BA,第二行可以是AC或CA

可能吗?? 我们得到了下面的上述问题的解决方案

select distinct least(col1, col2), greatest(col1, col2)
from the_table;

但是如果有超过2列,那么我将无法工作

让我们假设以下情况

输入项

 col1 col2 col3
    A   B   E
    A   C   E
    A   D   E
    B   A   F
    C   A   E

输出量

 col1 col2 col3
    A   B   E
    A   D   E
    B   A   F
    C   A   E

那么可能的解决方案是什么?

这是一种方法:

select col1, col2
from t
where col1 <= col2
union all
select col1, col2
from t
where col1 > col2 and
      not exists (select 1 from t t2 where t2.col1 = t.col2 and t2.col2 = t.col1);

以下内容适用于Oracle和Postgres:

select distinct least(col1, col2), greatest(col1, col2)
from the_table;

在线示例: http : //rextester.com/BZXC69735

    select DISTINCT * from (
select 'A' as col1, 'B' as col2 from dual 
union
select 'B' as col1, 'A' as col2 from dual 
union
select 'A' as col1, 'C' as col2 from dual 
union
select 'C' as col1, 'A' as col2 from dual 
union
select 'A' as col1, 'D' as col2 from dual 
)a
select col1, col2 from t where col1 <= col2
union
select col2, col1 from t where col1 > col2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM