最初的问题是数据库特定的,但也许这是一个包含更通用的答案的好地方.这是一个常见的问题.您描述的概念通常称为"组级联".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更多的工作,但更灵活.有关详细信息,请参阅此其他帖子.(当然PostgreSQL 9.0及更高版本也有此选项.)
Oracle&MS SQL Server - 创建一个存储过程,该过程将org_id作为其输入并输出连接的员工姓名.然后在查询中使用此存储过程.这里的一些其他响应包括有关如何编写这些存储过程的一些细节.
select o.ID, o.Address, o.OtherDetails, MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) as Employees from organization o
其他DBMS技术 - 存储过程路由最有可能.也许其他人可以通过更多技术特定答案更新此答案.