MySQL从2个或更多列中获取所有唯一值

MySQL从2个或更多列中获取所有唯一值,mysql,query-optimization,Mysql,Query Optimization,我试图从非统一的表中选择唯一的值,并仅显示唯一的值 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 so

我试图从非统一的表中选择唯一的值,并仅显示唯一的值

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      |
+--------------------------+
我真的不喜欢双重选择。还有比这更有效的方法吗


提前谢谢。

我想这个查询可能适合您

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

orderby
子句似乎与示例数据不匹配,因此我将其保持不变。

我猜您可能需要使用COALESCE(),或者这不是答案,我需要查看“site”表的结构和数据