2016-07-05 64 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;