2016-11-12 3 views
0

меня присоединиться к мульти стола и получить этот результатгруппы по идентификатору и объединять данные где нулевой

 
project_id | title|phone | office_phone 
+++++++++++++++++++++++++++++++++++++++ 
3   |a  |1  |NULL 
4   |b  |Null |1 
4   |b  |2  |Null 
5   |c  |Null |1 
5   |c  |Null |2 
5   |c  |Null |3 
5   |c  |1  |Null 
5   |c  |2  |Null  

Теперь я хочу группы по проекту ид и объединять данные где нуль

Я хочу такой вывод

 
project_id | title|phone | office_phone 
+++++++++++++++++++++++++++++++++++++++ 
3   |a  |1  |NULL 
4   |b  |2  |1 
5   |c  |1  |1 
5   |c  |1  |2 
5   |c  |1  |3 
5   |c  |2  |1 
5   |c  |2  |2 
5   |c  |2  |3 

Как я могу это сделать?

+0

Что произойдет, если ваши данные также имеют следующую строку: '5 | c | 2 | null'? С чем «office_phone» будет объединен? Будет ли это влиять на комбинации, которые уже были сделаны значением 'phone' 1? Логика не ясна. – trincot

+0

Я обновляю свой вопрос для '5 | c | 2 | null' –

+0

Функционал 'title' зависит от' project_id'? Или возможно, что разные значения 'title' могут встречаться с одним и тем же' project_id'? – trincot

ответ

0

Вам нужен полный внешний автообъединение, но MySql не поддерживает синтаксис full outer join, вам придется вернуться к union, чтобы достичь того же результата:

select  a.project_id, a.title, a.phone, b.office_phone 
from  tbl as a 
left join tbl as b 
     on a.project_id = b.project_id 
     and b.office_phone is not null 
where  a.phone is not null 
union 
select  a.project_id, a.title, b.phone, a.office_phone 
from  tbl as a 
left join tbl as b 
     on a.project_id = b.project_id 
     and b.phone is not null 
where  a.office_phone is not null 
and  b.phone is null 
order by 1, 2, 3, 4; 

Посмотреть работать на sqlfiddle.

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