2016-07-05 62 views
0

更好的标题?请编辑。通过编号将多个加入记录合并为一个

有两个表:

# 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 

目前我使用一个连接查询,通常得到:

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

假设您知道潜在列的数量,重刑是使用conditional aggregationpivot结果:

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;