2010-09-02 4 views
0

Я пытаюсь выбрать UNIQUE значения из неравномерной таблицы и показывать только уникальные.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

ответ

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 положение, кажется, не совпадать с данными выборки, поэтому я оставил его без изменений.

Смежные вопросы