通过id将多个连接记录合并为一个

时间:2016-07-05 18:45:26

标签: sql

更好的头衔?请编辑。

有两张桌子:

# 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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;