获取多个列的唯一或不同值

时间:2014-11-17 05:01:10

标签: mysql sql

假设我有超过2或3个三个字段的表。在该字段中,我想从该表中获取唯一值。

输入:

表名:测试

column1   column2  column3
  A         P        Y
  B         P        X
  A         Q        Z
  C         R        Y
  B         R        Y

输出:

column1    column2   column3
  A          P         Y
  B          Q         X
  C          R         Z

此处订单不是导入,但我希望从不同的列中获取唯一值。

2 个答案:

答案 0 :(得分:2)

最简单的方法可能是每个列中所有唯一值的UNION,如下所示。

SELECT DISTINCT column_name,column_value FROM
(
    SELECT 'column1' as column_name,
           Column1 as column_value
    FROM test
    UNION ALL
    SELECT 'column2' as column_name,
           Column2
    FROM test
    UNION ALL
    SELECT 'colum3' as column_name,
           Column3
    FROM test
)

答案 1 :(得分:2)

在oracle中,您可以使用此查询:

select column1, column2, column3 
from (select rownum rw, column1 from (select distinct column1 from test)) t1 
     full outer join
     (select rownum rw, column2 from (select distinct column2 from test)) t2 on (t2.rw = t1.rw)
     full outer join
     (select rownum rw, column3 from (select distinct column3 from test)) t3 on (t3.rw = t2.rw or t3.rw = t1.rw);

ROWNUM是一个伪列,它为每一行提供一个行号。

请注意,如果列具有不等数量的唯一值,则某些行/列中可能存在NULL值。

我们的想法是在每列中找到所有唯一值(3个子查询),为每个子查询中的每一行分配行号,并按行号完全连接所有结果。