热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQL查询技巧:合并多行数据为单行展示

探讨如何通过SQL查询将来自多个表的多行信息整合到同一行中展示,特别适用于需要汇总特定商品所有相关信息的场景。

我在实现将一个商品的所有信息整合到一行显示的需求时,虽然完成了任务,但感觉代码不够优雅,希望能得到更好的建议和改进方法。以下示例中的表结构是随机编写的,实际应用中的表设计合理性和数据库环境差异请自行调整。

需求描述:
将一件商品的所有相关表信息汇总并在一行中显示。

涉及的表结构如下:
表1 (table1):
商品ID(主键),商品名称,价格,规格
表2 (table2):
商品ID(主键),供应商ID(主键),供货日期,保质期
表3 (table3):
商品ID(主键),负责人,所属部门

附加条件:
每件商品由固定的四个供应商(标识为a, b, c, d)提供。

当前的SQL实现方式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
t1.商品ID, t1.商品名称, t1.价格, t1.规格,
t3.负责人, t3.所属部门,
ta.供应商 AS 供应商a, ta.供货日期 AS 供货日期a, ta.保质期 AS 保质期a,
tb.供应商 AS 供应商b, tb.供货日期 AS 供货日期b, tb.保质期 AS 保质期b,
tc.供应商 AS 供应商c, tc.供货日期 AS 供货日期c, tc.保质期 AS 保质期c,
td.供应商 AS 供应商d, td.供货日期 AS 供货日期d, td.保质期 AS 保质期d
FROM
table1 t1
JOIN table3 t3 ON t1.商品ID = t3.商品ID
JOIN (SELECT * FROM table2 WHERE 供应商 = 'a') ta ON t1.商品ID = ta.商品ID
JOIN (SELECT * FROM table2 WHERE 供应商 = 'b') tb ON t1.商品ID = tb.商品ID
JOIN (SELECT * FROM table2 WHERE 供应商 = 'c') tc ON t1.商品ID = tc.商品ID
JOIN (SELECT * FROM table2 WHERE 供应商 = 'd') td ON t1.商品ID = td.商品ID;

此查询语句能够满足基本需求,但可能存在性能问题或可读性不佳的问题。欢迎各位提供更加高效和优雅的解决方案。


推荐阅读
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文详细介绍了如何使用libpq库与PostgreSQL后端建立连接。通过探讨PQconnectdb()函数的工作原理及其在实际应用中的使用方法,帮助读者理解并掌握建立高效、稳定的数据库连接的关键步骤。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
  • 本文介绍如何通过SQL查询从JDE(JD Edwards)系统中提取所有字典数据,涵盖关键表的关联和字段选择。具体包括F0004和F0005系列表的数据提取方法。 ... [详细]
  • 如何在PostgreSQL中查看数据表
    本文将指导您使用pgAdmin工具连接到PostgreSQL数据库,并展示如何浏览和查找其中的数据表。通过简单的步骤,您可以轻松访问所需的表结构和数据。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
author-avatar
依一勇婷16_639
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有