2015-11-13 4 views
0

Мне нужно получить все строки из таблицы, которые имеют уникальное значение в определенных полях и всех строках, чем null в этих полях. Пример:Выберите уникальные результаты и null

id | name | group 
----------------- 
1 | One | 1 
2 | Two | null 
3 | Three| 3 
4 | Four | 2 
5 | Five | 1 
6 | Six | 2 
7 | Seven| null 

Результат:

id | name | group 
----------------- 
1 | One | 1 
2 | Two | null 
3 | Three| 3 
4 | Four | 2 
7 | Seven| null 

Как сделать это в одном запросе?

+1

Какова логика, которая выбрала «Четыре» над «шестью»? –

ответ

2
select t.id, t.name, t.`group` 
from tablename t 
join (select `group`, min(id) as mid 
     from tablename 
     where `group` is not null 
     group by `group`) x on x.mid = t.id and x.`group` = t.`group` 
union all 
select id, name, `group` 
from tablename 
where `group` is null 
+0

Вам нужно 'JOIN' –

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