2016-07-05 15 views
0

より良いタイトル?編集してください。idで複数の結合レコードを1つにマージする

# 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

潜在的な列の数を知っていると仮定すると、1つの演算子ションは、あなたの結果をpivotするconditional aggregationを使用することです:

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; 
関連する問題