如何根据关系获取一条记录的多条记录?

2024-01-02

我有两个表组织和员工具有一对多关系,即一个组织可以有多名员工。现在我想选择特定组织的所有信息以及该组织所有员工的名字。最好的方法是什么?我可以在单个记录集中获取所有这些内容吗?或者我将不得不根据否获取多行。员工人数?这是我想要的一些图形演示:

Org_ID      Org_Address    Org_OtherDetails    Employess

1           132A B Road    List of details     Emp1, Emp2, Emp3.....

最初的问题是特定于数据库的,但也许这是包含更通用答案的好地方。这是一个常见问题。您描述的概念通常称为“组串联”。 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及更高版本也有这个选项。)

  • Oracle- 同样的想法使用LISTAGG.

  • 微软SQL服务器- 同样的想法使用STRING_AGG

  • 后备解决方案- 在其他数据库技术或上面列出的技术的非常非常旧的版本中,您没有这些组串联函数。在这种情况下,创建一个存储过程,将 org_id 作为输入并输出串联的员工姓名。然后在查询中使用此存储过程。这里的其他一些响应包括有关如何编写此类存储过程的一些详细信息。


select 
  o.ID, o.Address, o.OtherDetails,
  MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) as Employees
from 
  organization o
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据关系获取一条记录的多条记录? 的相关文章

  • 更改Docker容器中的mysql密码

    我如何更改 docker 容器中的 root 密码 因为一旦我停止 mysql 服务 容器就会自动停止 我应该停止 mysql 容器并部署一个新容器吗 您可以使用正在运行的容器更改它docker exec session https doc
  • 从存储过程中的动态 SQL 获取结果

    我正在编写一个存储过程 需要在过程中动态构造 SQL 语句以引用传入的表名称 我需要让这个 SQL 语句返回一个结果 然后我可以在整个过程的其余部分中使用该结果 我尝试过使用临时表和所有内容 但我不断收到一条消息 提示我需要声明变量等 例如
  • MySQL“选择更新”行为

    根据 MySql 文档 MySql 支持多粒度锁定 MGL case 1 开放航站楼 1 连接到mysql mysql gt start transaction Query OK 0 rows affected 0 00 sec mysql
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7
  • PreparedStatement setnull方法中Types.INTEGER和Types.NULL的区别

    下面的说法有什么区别 PreparedStatement setNull 1 java sql Types NULL and PreparedStatement setNull 1 java sql Types INTEGER 第一个指示驱
  • 更新重复密钥上的复合密钥 [重复]

    这个问题在这里已经有答案了 我需要更新新行 如果两者都满足 date dat and empId who 作为复合键 但如果其中之一或两者不同 则插入 sql INSERT INTO history SET endtimestamp now
  • SQL Server 查询结果集的大小

    SQL Server 中是否有确定结果集中 Mgmt Studio 查询中返回的数据大小 以 MEGS 为单位 您可以打开客户端统计信息 查询菜单 包括客户端统计信息 它给出执行查询时从服务器返回的字节数
  • 使用MySQL计算单个表中借方和贷方的余额

    下面的 MySQL 表包含带有关联金额的借方或贷方 操作 如何选择具有非零 余额 的所有 CLIENT ID 我尝试将表连接到自身以计算所有借方和贷方总额 但有些东西无法正常工作 CLIENT ID ACTION TYPE ACTION A
  • SQL Server 使用通配符加入并在第一个匹配处停止

    IF OBJECT ID tempdb TABLE1 IS NOT NULL DROP TABLE TABLE1 IF OBJECT ID tempdb TABLE2 IS NOT NULL DROP TABLE TABLE2 CREATE
  • 删除大量记录需要很长时间

    我有一个包含约 60 000 行的数据库表 在 SQL Server 2012 Express 上运行 我使用以下代码来清除旧行 Deleting CPU measurements older than oldestAllowedTime
  • Laravel Sum 列数据库 Eloquent

    尝试获取我的一个表中 int 字段的总和应该非常容易 不幸的是 事实并非如此 因为无论我使用 Laravel MySQL 还是 Excel 我都会得到不同的结果 Laravel 5 4 给了我20506 Table sum field na
  • PHP 的 PDO 可以限制为单个查询吗?

    PHP 的 PDO 允许通过 query 方法或作为准备好的语句同时执行多个查询 以下两个示例均有效 Two SQL queries query SELECT FROM table DROP table Execute via query
  • Oracle 数据库 12c 尝试连​​接时出错:网络适配器无法建立连接

    我第一次安装Oracle数据库12c 我正确地遵循了所有步骤并将其安装在 Windows 7 64 位上 但是当我单击 SQL Developer 并尝试创建新连接时 我输入了用户名和密码等信息 最后单击 测试 按钮 我得到了这个错误消息
  • SQL Server 相当于 MySQL 的 USING

    在 MySQL 中 当您连接不同表中具有相同名称的列时 可以在连接中使用关键字 USING 例如 这些查询产生相同的结果 SELECT FROM user INNER JOIN perm USING uid SELECT FROM user
  • Clojure MySQL 语法错误异常(“[...] 靠近 '???????????????' [...]”)

    除了建立连接之外 我在使用 clojure contrib sql 做任何事情时都遇到困难 我有一个 mysqld 在 localhost 3306 上运行 数据库名为clj db 用户 clj user localhost 和密码 clj
  • 非规范化如何提高数据库性能?

    我听说过很多关于非规范化的内容 它是为了提高某些应用程序的性能而进行的 但我从来没有尝试过做任何相关的事情 所以 我只是好奇 规范化数据库中的哪些地方会使性能变差 或者换句话说 非规范化原则是什么 如果我需要提高性能 如何使用此技术 非规范
  • 更新plpgsql中触发器函数中的多列

    给出以下架构 create table account type a id SERIAL UNIQUE PRIMARY KEY some column VARCHAR create table account type b id SERIA
  • 在存储过程结束时显式删除本地临时表有什么好处?

    考虑以下伪 T SQL 代码 由存储过程执行 CREATE TABLE localTable
  • 如何使用 PHP 从 MySQL 检索特定值?

    好吧 我已经厌倦了 过去一周我花了大部分空闲时间试图解决这个问题 我知道 SQL 中的查询已更改 但我无法弄清楚 我能找到的所有其他帖子似乎都已经过时了 如果有人能帮助我 我将非常感激 我想做的就是使用手动输入数据库的唯一 密码 来检索行的
  • 哪个是识别关系或非识别关系中的子表?

    在表之间的识别和非识别关系的上下文中 MySQL 文档大量将表称为父表和子表 如何判断哪个表是父表 哪个表是子表 子表 A K A 弱实体 http en wikipedia org wiki Weak entity 是一个表 其主键属性d

随机推荐

  • 在实体框架中创建动态 linq 排序和搜索顺序语句时

    我正在尝试构建一个函数来根据某些参数动态生成不同的查询 我对 LINQ 语法有点困惑 不确定我是否做对了 字符串类型参数集是 search 用于搜索文本框值 searchfield 搜索内容 limit begin limit end 用于
  • Gradle 混合构建风味

    有没有办法在gradle中 混合 多种口味 例如 假设我有两种口味 Red and Blue 现在假设我有两种口味 我希望它们有 子口味 如果你喜欢的话 Complex and Simple 到目前为止我所知道的是 这需要我创建四种口味 R
  • Getview里面的Click方法被多次调用

    我希望 click 方法只被调用一次 我该怎么做才能得到这个结果 这是我的代码 public override View GetView int position View convertView ViewGroup parent View
  • 限制多个 MongoDB 数组大小

    我有一个文档 其中列出了按主题分隔的作者的帖子项 ID 这会产生如下所示的文档 id sdkafjsadkfjads3023 Author SomeGuy RecentPosts topic 1 Count 4 Posts postitem
  • 预定义类型 microsoft.csharp.runtimebinder 未定义或导入

    我在我的 C 项目中使用动态关键字 我收到以下错误 找不到编译动态表达式所需的一种或多种类型 下面是我的代码 我们使用 VS 2013 和 NET Framework 4 5 1 dynamic cstmDocProp Microsoft
  • 如何让JVM默认使用给定的源IP?

    在使用默认的内置 java xml SOAPConnectionFactory 时 有什么方法可以强制 JVM 使用特定的源 IP 地址吗 看起来默认最终会创建 HttpSOAPConnection 对象 sun 私有 API 然后在底层使
  • 在zend框架中设置cookie

    我是 zend 框架的新手 我已经编写了这段代码来在我的网站中设置 cookie public function setCookie data email cookie new Zend Http Cookie user email id
  • 最小的音频文件:MP3、Ogg 还是 Wav?

    我正在寻找最小类型的音频文件 以便某些 JavaScript 能够更流畅地工作 在这三个人中 Ogg通常会小于MP3 两者都会比未压缩的小得多WAV 当然 可能还有其他因素对您的网站产生影响 例如质量 对于大多数用途来说没有太大的明显差异
  • Catch 动态地将参数传递给测试用例

    我有一个 C 项目 正在使用它进行测试捕获 cpp https github com philsquared Catch 我编译并运行以下文件来运行我的测试 define CATCH CONFIG MAIN include catch hp
  • 如何分离多机集群配置的各个阶段?

    假设我有 4 个 Vagrant 盒子 3 种是相同配置的变体 例如 Consul 而一种具有完全不同的配置 例如数据库 我需要在三个配置相似的 Consul VM 上运行一个略有不同的配置步骤 然后 我需要针对其中 1 个 Vault V
  • 在 cygwin 上安装 uwsgi

    有人设法在 cygwin python 2 7 上安装 uwsgi 吗 uwsgi 2 0 11 2 python setup py install running install using profile buildconf defau
  • 有没有 Maven 睡眠功能?

    我设置了 Maven 配置文件用于测试 在预集成测试中 maven 启动两个 jetty 服务器 然后启动测试 我偶然发现的问题是在服务器中 测试开始时它们没有完全加载 看来问题是通过在测试中添加 5 秒睡眠时间来解决的 但我希望将其添加到
  • Makefile 中是否可以依赖符号链接?

    我的项目中需要几个符号链接 From src openlayers 文件夹img and theme必须符号链接在contrib openlayers The contrib openlayers文件夹也应该自动创建 PHONY run r
  • 如果所有者将我从 CloudKit 上的 CKShare 中删除,如何收到通知

    假设某张唱片的所有者与我分享了该唱片 我收到一个共享链接 我打开它并接受共享 如下所示 let operation CKAcceptSharesOperation shareMetadatas metadata operation acce
  • 使用 VBScript 遍历 XML 文件中的所有节点

    我编写了一个 VBScript 它应该遍历 XML 文件中的所有节点 无论树的深度如何 这一点做得很好except不显示 2 级或以上深度的节点的节点名称 我需要节点名称和值 以便获得名称 值对以供其他程序进一步处理 任何人都可以帮我显示丢
  • 使用 Hibernate JPA (JPQL) 进行非多态查询

    我发布这个问题 答案作为扩展如何在 Hibernate 中执行非多态 HQL 查询 https stackoverflow com questions 2093025 how to perform a non polymorphic hql
  • 条件 Java 编译

    我是一名资深 C 程序员 刚接触 Java 我正在 Eclipse 中开发 Java Blackberry 项目 问题 有没有办法在项目中引入不同的配置集 然后根据这些配置集编译略有不同的代码 在Visual Studio中 我们有项目配置
  • 通过 FIFO 重定向 stdin

    我正在 GNU Linux 下运行一个服务器应用程序 用 Java 编写 它接收输入 我猜是来自标准输入 并解释它以运行一些命令 我不想在终端窗口内运行应用程序 我想运行守护程序 但我仍然希望能够随时输入命令 我想我也许可以使用 fifos
  • 使用相同的标记和偏移位访问和更新 2 路关联缓存

    我对如何在双向关联缓存上访问数据感到困惑 例如 C ABS C 32KB A 2 B 32bits S 256 offset lg B 5 index lg S 8 tag 32 offset index 19 假设我有以下地址 tag i
  • 如何根据关系获取一条记录的多条记录?

    我有两个表组织和员工具有一对多关系 即一个组织可以有多名员工 现在我想选择特定组织的所有信息以及该组织所有员工的名字 最好的方法是什么 我可以在单个记录集中获取所有这些内容吗 或者我将不得不根据否获取多行 员工人数 这是我想要的一些图形演示