如果 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
假设我有一个 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