当前位置:  开发笔记 > 后端 > 正文

如何基于关系获得针对一条记录的多条记录?

如何解决《如何基于关系获得针对一条记录的多条记录?》经验,为你挑选了1个好方法。



1> mdahlman..:

最初的问题是数据库特定的,但也许这是一个包含更通用的答案的好地方.这是一个常见的问题.您描述的概念通常称为"组级联".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技术 - 存储过程路由最有可能.也许其他人可以通过更多技术特定答案更新此答案.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有