2010-09-02 37 views
0

我试图从非统一表中选择UNIQUE值并仅显示唯一的值。来自2列或更多列的MySQL所有唯一值

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  | 
+--------------------------+ 

我真的不喜欢的双重选择。无论如何,我可以做到这一点更高效吗?

预先感谢您。

+0

我的猜测是你可能需要使用COALESCE()或者这可能不是答案,我需要查看“站点”表的结构和数据 – pleasedontbelong 2010-09-02 19:34:53

回答

1

我认为这个查询可能适合你。

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条款似乎并不符合您的样本数据,所以我离开它不变。