2010-09-02 84 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條款似乎並不符合您的樣本數據,所以我離開它不變。