MYSQL 多表拼接link

news2024/11/24 5:05:58

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

问题描述

场景:mysql中以合同表为主表,查询发票表,收款单表,报销单表,实现合同执行信息的查询。使用JOIN的话发现出现了很对交叉数据,请问怎么才能实现合同只有一条,后面分别显示发票,收款,报销情况

合同表:

合同号 合同类型 合同签订日期
HT001 物业合同 2024/1/1
HT002 安保合同 2024/1/1
HT003 服务合同 2024/1/1
HT004 服务合同 2024/1/1
HT005 服务合同 2024/1/1

发票表:

发票号 合同号 发票金额
FP001 HT001 100
FP002 HT001 100
FP003 HT002 100
FP004 HT002 100
FP005 HT003 100
FP006 HT004 100

收款单表:

收款单号 合同号 收款金额
SK001 HT001 200
SK002 HT001 200
SK003 HT003 200
SK004 HT003 200
SK005 HT003 200
SK006 HT005 200

报销单表:

报销单号 合同号 报销金额
BX001 HT001 300
BX002 HT001 300
BX003 HT002 300
BX004 HT002 300
BX005 HT003 300
BX006 HT004 300
BX007 HT005 300

想要的结果表:

合同号 合同类型 合同签订日期 发票号 发票金额 收款单号 收款金额 报销单号 报销金额
HT001 物业合同 2024/1/1 FP001 100 SK001 200 BX001 300
HT001 物业合同 2024/1/1 FP002 100 SK002 200 BX002 300
HT002 安保合同 2024/1/1 FP003 100 BX003 300
HT002 安保合同 2024/1/1 FP004 100 BX004 300
HT003 服务合同 2024/1/1 FP005 100 SK003 200 BX005 300
HT003 服务合同 2024/1/1 FP005 100 SK004 200 300
HT003 服务合同 2024/1/1 FP005 100 SK005 200 300
HT004 服务合同 2024/1/1 FP006 100 BX006 300
HT005 服务合同 2024/1/1 SK006 200 BX007 300

解决方案

  如下是上述问题的解决方案,仅供参考:

在 MySQL 中,要实现您所描述的查询结果,即合同表中每条记录只出现一次,并且分别显示与之关联的发票、收款单和报销单的信息,可以使用 LEFT JOIN 来连接各个表,并通过 GROUP BY 和聚合函数来处理可能存在的多条记录。但是,由于您不希望出现笛卡尔积,我们需要确保每个 JOIN 都是有意义的,并且只关联那些确实与主表有关联的记录。

以下是一个可能的 SQL 查询示例,它使用了 LEFT JOIN 来连接各个表,并通过 GROUP_CONCAT 函数来合并同一合同号下的多个发票号、收款单号和报销单号及其金额:

SELECT
    h.合同号,
    h.合同类型,
    h.合同签订日期,
    GROUP_CONCAT(DISTINCT i.发票号 ORDER BY i.发票号) AS 发票号,
    GROUP_CONCAT(DISTINCT i.发票金额 ORDER BY i.发票号) AS 发票金额,
    GROUP_CONCAT(DISTINCT r.收款单号 ORDER BY r.收款单号) AS 收款单号,
    GROUP_CONCAT(DISTINCT r.收款金额 ORDER BY r.收款单号) AS 收款金额,
    GROUP_CONCAT(DISTINCT b.报销单号 ORDER BY b.报销单号) AS 报销单号,
    GROUP_CONCAT(DISTINCT b.报销金额 ORDER BY b.报销单号) AS 报销金额
FROM
    合同表 h
LEFT JOIN 发票表 i ON h.合同号 = i.合同号
LEFT JOIN 收款单表 r ON h.合同号 = r.合同号
LEFT JOIN 报销单表 b ON h.合同号 = b.合同号
GROUP BY h.合同号, h.合同类型, h.合同签订日期
ORDER BY h.合同号;

在这个查询中:

  • GROUP_CONCAT 函数用于将同一合同号下的多个记录合并为一个字符串,每个值之间用逗号分隔。
  • DISTINCT 关键字确保每个合并的字符串中不会有重复的值。
  • ORDER BYGROUP_CONCAT 函数中用于确保合并的值按照一定的顺序排列。
  • 最外层的 GROUP BY 用于确保合同表中的每条记录只出现一次。
  • LEFT JOIN 确保了即使某些合同没有对应的发票、收款单或报销单记录,合同表中的记录仍然会被包含在结果中。

请注意,这个查询假设您希望在结果中包含所有合同,即使它们没有发票、收款单或报销单的记录。如果您的数据中存在多个发票号、收款单号或报销单号对应于同一个合同号,那么每个合同号可能会有多个行。如果您希望每个合同号只对应一行,并且希望列出所有相关的发票号、收款单号和报销单号,那么上面的查询是合适的。

  希望如上措施及解决方案能够帮到有需要的你。

  PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

  若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。

☀️写在最后

  如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。

  ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《CSDN问答解惑-专业版》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。

码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2208206.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql复制表结构和数据

1.实例 #复制一张和test 一摸一样的表结构 CREATE TABLE test_one like test#往复制的表结构中复制数据 INSERT INTO test_one SELECT * FROM test#两者一起使用相当于 cv大法2.总结 完全实现了表结构和数据的复制,但是两条sql 得分两步执行 2.1 复制表结构 #复制…

AI开源项目

开源AI知识库 FastGPT FastGPT是一个基于LLM(大型语言模型)的知识库问答系统项目,以下是对FastGPT项目的详细解释: 一、项目背景与团队 FastGPT由FastAI团队开发,该团队包含多位在机器学习和自然语言处理领域具有丰富…

大数据应用方案1-Postgresql集群

1 说明: 在做任何系统之前,选择哪种数据底座做支持很重要,是一栋大厦地基牢不牢固的根本问题,这里用Postgresql基于docker实现了分布式的集群实践,分享之。 2. 基于docker的集群实践 2.1 方案设计 - 两个已安装了d…

ICLR 2024 Spotlight|SEAL:面向真实场景超分辨率的系统性评估框架

研究背景 现实世界图像超分辨率(Real-World Super-Resolution, Real-SR)技术,作为提升图像清晰度的关键技术,正变得越来越重要。然而,如何准确评估Real-SR方法的性能,一直是该领域的一大挑战。目前的评估…

mig IP核的学习

mig全称是Memory Interface Generator。 参考自视频:MIG IP配置_哔哩哔哩_bilibili DDR基础知识 时钟类型 使用流程 选择DDR3 16是地址线的位宽 能在DDR3的型号MT41K256M16XX-125中看出来。 怎么选择clock period 靠的是 芯片型号中的 -125,然后算出 800MHZ,…

【市场解读】中国智能电车发展趋势

参考文献:汽车之家-《2024中国智能电动车发展趋势洞察报告》 市场趋势 汽车消费 新能源渗透率持续走高,在2024上半年已达到42%,有望在2025冲刺60%。用户对新能源车的关注度也持续增长。 新能源车新品投放加速,其中混动新品投…

QT 10.11

作业&#xff1a;将数据库和图像处理自己实现一遍 数据库操作 源文件 #include "widget.h" #include "ui_widget.h" #include<QMessageBox> #include<QDebug> #include <QTableWidget> Widget::Widget(QWidget *parent) : QWidget(pare…

如何在 idea 中移动类

今天在项目中出现了一个问题&#xff0c;大哥告诉我说&#xff0c;我的类放错包了&#xff0c;但是此时这个类我已经写得差不多了&#xff0c;有很多其他类中都用的是当前包的路径&#xff0c;那么该如何简单的将类移动位置呢&#xff1f; 1.右击你要移动的类&#xff0c;依次…

包含957,174个局部最优解,为优化算法评估提供了新的视角

2024-10-03, 英国诺丁汉大学数学科学学院的Gary R. Mirams教授团队创建了一个基于英国地形的二维优化基准数据集,该数据集包含了经过修改的英国地形数据&#xff0c;并从中识别出了957,174个局部最优解&#xff0c;为优化算法的评估提供了新的视角。 一、研究背景&#xff1a; …

使用 `curl` 命令时遇到 “option --data-raw: is unknown“ 错误的解决方案

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Unity 如何在 iOS 新增键盘 KeyCode 响应事件

1.定位到文件UnityViewKeyboard.mm同如下路径: 2.打开该Objective-C脚本进行编辑,找到关键函数: createKeyboard: - (void)createKeyboard {// only English keyboard layout is supportedNSString* baseLayout "1234567890-qwertyuiop[]asdfghjkl;\\zxcvbnm,./!#$%^&am…

【C语言】深入理解指针(二)(下)

本篇博客将讲解以下知识&#xff1a; 1、二级指针 2、指针数组 3、指针数组模拟二维数组 1、二级指针 指针变量也是变量&#xff0c;是变量就有地址&#xff0c;那指针变量的地址存放在哪里&#xff1f;二级指针 如何理解二级指针&#xff1f; 以上述代码为例&#xff1a; i…

多点无人机 组网系统技术详解

多点无人机组网系统技术&#xff0c;作为一种先进的多无人机协同作业技术&#xff0c;其核心在于通过先进的通信技术将多架无人机连接成一个高度协同的空中网络&#xff0c;以实现信息共享、任务分配、协同作业等功能。以下是对该技术的详细解析&#xff1a; 一、技术概述 多…

基于SSM的朋辈帮扶系统

文未可获取一份本项目的java源码和数据库参考。 一、本课题研究意义 随着市场经济发展的不断深入&#xff0c;高校学生面临着新的问题和挑战。在全球一体化、价值观多元化、信息网络化的大背景下&#xff0c;越来越多的学生承受着来自社会、家庭与自身方方面面的压力&#xf…

在word/wps中优雅的插入代码

​​​​​​​使用的网址如下&#xff1a;在线美化代码并支持一键黏贴到文档中 使用方式&#xff1a; 1、登录到在线网页中&#xff0c;输入需要格式化的语言&#xff0c;例如JSON 2、点击高亮代码&#xff0c;即可生成格式化后的JSON代码 3、将生成的代码直接复制到wps文档…

软件功能测试重点和流程有哪些?专业软件测评服务公司推荐

软件功能测试就是对产品的各功能进行验证&#xff0c;根据功能测试用例&#xff0c;逐项测试&#xff0c;检查产品是否达到用户要求的功能。功能测试也叫黑盒测试或数据驱动测试&#xff0c;只需考虑需要测试的各个功能&#xff0c;不需要考虑整个软件的内部结构及代码.一般从软…

uniapp__微信小程序使用秋云ucharts折线图双轴

1、子组件 <template><view class"charts-box"><qiun-data-charts type"line":opts"computedOpts":chartData"chartData"/></view> </template><script> export default {props: {chartData: {t…

什么充电宝牌子质量好又靠谱?2024年热销款充电宝型号推荐

在快节奏的现代生活中&#xff0c;充电宝已成为我们随身携带的必需品&#xff0c;为智能手机、平板电脑等电子设备提供随时随地的电力支持。然而&#xff0c;面对市场上琳琅满目的充电宝品牌和型号&#xff0c;如何挑选一款既质量好又靠谱的产品&#xff0c;成为了许多消费者关…

六西格玛黑带项目:TBX-02无人机飞行稳定性提升——张驰咨询

一、项目背景与问题定义 TBX-02是该公司最新发布的消费级无人机&#xff0c;面向摄影爱好者和户外探险者。产品上市后&#xff0c;通过客户反馈和实际测试数据发现&#xff0c;该无人机在复杂飞行环境中&#xff0c;如强风或快速移动时&#xff0c;存在明显的飞行抖动和稳定性…

多线程会在一个事务里面吗?

目录 多线程会在一个事务里面吗&#xff1f; 多线程、数据库事务以及数据库连接之间的关系 Spring的事务管理​​​​​​​ 声明式事务Transactional的实现原理 声明式事务Transactional的失效场景 Transactional注解的方法不是public为什么会失效 Spring AOP的代理机制…