如果 select 中有 table returns 多行,如何合并数据?

How to combine data if the a table returns multiple rows in a select?

假设我有一个 sql 数据库和这样的查询:

http://sqlfiddle.com/#!2/10af9/3

如您所见,我有几个用户有一些最喜欢的颜色。我想做的是通过 select 所有用户和他们最喜欢的颜色运行查询......但是,为了在我自己的代码中易于使用,我希望没有重复数据在每一行。

我希望最终结果是:

1   |  Email  | admin@sqlfiddle.com | [Blue, Green]
2   | Twitter | @sqlfiddle          | [Purple]

这样我返回的是table个用户,每一行都是一个用户,我可以得到他们喜欢的颜色。

如果有不同的思考方式(不是合并,而是在一行中有 table 个用户和他们最喜欢的颜色),我也很想听听。

谢谢。

SQL Fiddle 是 MySQL,所以我假设那是数据库。在 MySQL 中,您可以使用 group_concat():

将它们放在一起
select sc.id, sc.type, sc.details,
       group_concat(fc.color)
from supportContacts sc left join
     favoriteColors fc
     on sc.id = fc.support_id
group by sc.id, sc.type, sc.details;

如果您确实希望它们采用带方括号的格式:

       concat('[', group_concat(fc.color separator ', '), ']')

Here 就是 SQL Fiddle.

其他数据库通常具有类似的功能。

您可以使用 GROUP_CONCAT,它会完全满足您的要求。

select 
  supportContacts.id, 
  supportContacts.type, 
  supportContacts.details, 
  GROUP_CONCAT(favoriteColors.color)
from supportContacts 
left join favoriteColors on supportContacts.id = favoriteColors.support_id
group by supportContacts.id