2016-07-05 8 views
0

Лучшее название? Пожалуйста, измените.Слияние нескольких записей объединения в один по id

Имея две таблицы:

# table1 
     id name desc 
    -------------------- 
     1 Nim blah 
     2 Rod blah 
     3 Nero blah 

# table2 
id_table1 rank url 
---------------------- 
     1  1 U11 
     1  2 U12 
     1  3 U13 
     2  1 U21 
     3  1 U31 
     3  2 U32 

В настоящее время я с помощью JOIN запросов и обычно получают:

id name desc url 
--------------------- 
    1 Nim blah U11 
    1 Nim blah U12 
    1 Nim blah U13 
    2 Rod blah U21 
    3 Nero blah U31 
    3 Nero blah U32 

Я интересно, если есть запрос, который будет поставлять что-то вроде:

id name desc url(1) url(2) url(3) 
------------------------------------- 
    1 Nim blah U11  U12  U13 
    2 Rod blah U21  NULL NULL 
    3 Nero blah U31  U32  NULL 

ответ

0

Предполагая, что вы знаете количество потенциальных столбцов, один op ции заключается в использовании conditional aggregation для pivot результатов:

select t1.id, t1.name, t1.desc, 
     max(case when t2.rank = 1 then t2.url end) url1, 
     max(case when t2.rank = 2 then t2.url end) url2, 
     max(case when t2.rank = 3 then t2.url end) url3 
from table1 t1 
     join table2 t2 on t1.id = t2.id_table1 
group by t1.id, t1.name, t1.desc 
+0

Отлично! Да, я знаю, сколько потенциальных столбцов имеет текущий дизайн. Если он изменится, я могу выполнить предварительный запрос, чтобы определить это и сгенерировать сегмент 'max(). – user129107

0

ли вам нужны опции в отдельных колонках? В противном случае group_concat может быть интересным:

SELECT t1.id, t1.name, t1.desc, 
    group_concat(DISTINCT t2.url) as urls 
FROM table1 t1 
    INNER JOIN table2 t2 
      ON t.id = t2.id_table1; 
Смежные вопросы