最初的问题是特定于数据库的,但也许这是包含更通用答案的好地方。这是一个常见问题。您描述的概念通常称为“组串联”。 SQL-92 或 SQL-99 中没有标准解决方案。因此,您需要特定于供应商的解决方案。
-
MySQL- 使用内置的 GROUP_CONCAT 函数。在你的例子中你会想要这样的东西:
select
o.ID, o.Address, o.OtherDetails,
GROUP_CONCAT( concat(e.firstname, ' ', e.lastname) ) as Employees
from
employees e
inner join organization o on o.org_id=e.org_id
group by o.org_id
-
PostgreSQL- PostgreSQL 9.0 同样简单,因为 string_agg(表达式, 分隔符) 是内置的。这是元素之间的“逗号空格”:
select
o.ID, o.Address, o.OtherDetails,
STRING_AGG( (e.firstname || ' ' || e.lastname), ', ' ) as Employees
from
employees e
inner join organization o on o.org_id=e.org_id
group by o.org_id
9.0之前的PostgreSQL允许您使用CREATE AGGREGATE定义自己的聚合函数。比 MySQL 工作量稍多,但更灵活。看到这个其他帖子 https://stackoverflow.com/questions/43870/how-to-concatenate-strings-of-a-string-field-in-a-postgresql-group-by-query更多细节。 (当然PostgreSQL 9.0及更高版本也有这个选项。)
select
o.ID, o.Address, o.OtherDetails,
MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) as Employees
from
organization o