试图在sqlite db中获取3列的DISTINCT值

时间:2013-01-17 22:00:40

标签: mysql sql sqlite

所以我有一张包含3个cols的表:

Col1   Col2   Col3
 a       b     c
 b       c    null
 a      null   b
 c       d     a

我想要的输出是:

a,b,c,d,null

我希望尽可能将输出放在一个字符串中。

我试过了:

SELECT DISTINCT col1, col2, col3 FROM table

并没有得到预期的结果。任何想法?

4 个答案:

答案 0 :(得分:2)

单字符串解决方案(请参阅sqlfiddle):

SELECT  GROUP_CONCAT(COALESCE(c, 'NULL'), ',')
FROM    (
        SELECT  col1 c
        FROM    mytable
        UNION
        SELECT  col2 c
        FROM    mytable
        UNION
        SELECT  col3 c
        FROM    mytable
        ) q

答案 1 :(得分:1)

这在sqlite中起作用:

select col1 from table 
union
select col2 from table
union 
select coll3 from table

或:

select col1 from table where col1 is not null
union
select col2 from table where col2 is not null
union 
select coll3 from table where col3 is not null

消除空值。

注意我认为这不会很快执行但我知道在mssql union中会对结果做一个明确的

答案 2 :(得分:1)

SELECT Col1
FROM table
UNION
SELECT Col2
FROM table
UNION
SELECT Col3
FROM table

答案 3 :(得分:0)

如果您使用的是MySql,则可以使用此解决方案:

select group_concat(coalesce(c,'null') order by c is null, c)
from (
  select col1 c from tbl
  union
  select col2 c from tbl
  union
  select col3 c from tbl
) u

联合查询选择所有值,删除所有重复项。然后我将结果返回到单个字符串中,在结尾处按值以null值排序,并将null转换为'null'(因为group_concat将忽略空值)。

如果您使用的是SQLite,则Group_Concat不支持order by,您可以使用它:

select group_concat(coalesce(c,'null'))
from (
  select col1 c, col1 is null o from mytable
  union
  select col2 c, col2 is null o from mytable
  union
  select col3 c, col3 is null o from mytable
  order by o, c
) u