代码之家  ›  专栏  ›  技术社区  ›  Frankie

MySQL从2个或更多列中删除所有唯一值

  •  0
  • Frankie  · 技术社区  · 16 年前

    我试图从一个非统一的表中选择唯一的值,并且只显示唯一的值。

    SELECT DISTINCT "year" as sorter, year(data) as year, NULL as location
    FROM site 
    WHERE tipo='projects'
    
    UNION
    
    SELECT DISTINCT "loc" as sorter, NULL as year, spare_1 as location
    FROM site 
    WHERE tipo='projects'
    
    ORDER BY sorter ASC, year DESC, localition ASC
    

    这会回来的

    +--------+------+----------+
    | SORTER | YEAR | LOCATION |
    +--------+------+----------+
    | year   | 2010 | NULL     |
    +--------------------------+
    | year   | 2009 | NULL     |
    +--------------------------+
    | year   | 2008 | NULL     |
    +--------------------------+
    | loc    | NULL | London   |
    +--------------------------+
    | loc    | NULL | Paris    |
    +--------------------------+
    | loc    | NULL | NYC      |
    +--------------------------+
    

    我真的不喜欢双选。有没有比这更有效的方法?

    先谢谢你。

    1 回复  |  直到 16 年前
        1
  •  1
  •   bobs    16 年前

    我想这个问题可能对你有用。

    SELECT DISTINCT
        CASE WHEN data IS NOT NULL THEN "year" ELSE "loc" END AS sorter,
        CASE WHEN data IS NOT NULL THEN YEAR(data) ELSE NULL END AS year,
        CASE WHEN data IS NULL THEN spare_1 ELSE NULL END AS location
    FROM site
    WHERE tipo='projects'
    ORDER BY sorter ASC, year DESC, localition ASC
    

    这个 ORDER BY