三个表的联合查询的场景分析-场景4:c表维护a和b表的id关联关系(一对多)

基础SQL演练,带详细分析,笔记和备忘。

目录

背景介绍

表数据

需求1:查询g表所有记录,以及关联的h的id

需求2:在需求1基础上,查出关联的h的其它字段(name)

需求3:在需求2基础上,按gid分组、同时把对应的多个h表的字段各自放在一起

方式1

方式2


背景介绍

共三个表,g和h表分别是各自数据、无关联关系。另有k表维护了g和h表的关联关系,内容是k中包含了g_id和h_id两个字段,这两个字段分别和g表的id、h表的id相等,且各自一一对应。

表数据

g表

h表

m表

需求1:查询g表所有记录,以及关联的h的id

select g.id gid,g.name gname,m.h_id hidfrom demo_gs g left join demo_ms  mon m.g_id = g.id

结果

没什么问题。

需求2:在需求1基础上,查出关联的h的其它字段(name)

select g.id gid,g.name gname,m.h_id hid,h.name as hname from demo_gs g left join demo_ms  mon m.g_id = g.idleft join demo_hs  hon h.id = m.h_id

结果:

可以看到结果正确。

需求3:在需求2基础上,按gid分组、同时把对应的多个h表的字段各自放在一起

方式1

我们将对应多个的数据使用字符串拼接的方式拼一起,以逗号分隔

pg中可以使用STRING_AGG( CONCAT(h.id, ': ', h.name),'; ')

select g.id gid,g.name gname,group_concat(h.id SEPARATOR ',') hids ,group_concat(h.name SEPARATOR ',') hnamesfrom demo_gs g left join demo_ms  mon m.g_id = g.idleft join demo_hs  hon h.id = m.h_idgroup by gid

结果如下:

方式2

把对应多个的数据的地方使用json构建(适配支持JSON功能的数据库,JSON_OBJECTAGG在pg中不适用):

select g.id gid,g.name gname,JSON_OBJECTAGG(h.id,JSON_OBJECT('hname', h.name)) as hDatafrom demo_gs g inner join demo_ms  mon m.g_id = g.idleft join demo_hs  hon h.id = m.h_idgroup by gid

结果如下:

注意,之所以方式2 inner join demo_ms  m 这里使用了内连,原因是mysql中做JSON处理时要求数据不能为空:[22001]: Data truncation: JSON documents may not contain NULL member names. 

因为这时g表和h表各有一条id=6的数据在m中没有做关联,在做JSON_OBJECTAGG操作时就会报上述错误。因此只能采用内连,屏蔽掉为空的记录。

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

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

相关文章

AR智能眼镜解决方案_MTK平台安卓主板硬件芯片方案开发

AR智能眼镜,是一个可以让现场作业更智能的综合管控设备。采用移动互联网、大数据和云计算等技术,现场数据的采集与分析;同时实现前端现场作业和后端管理的实时连动、信息的同步传输与存储。让前端现场作业更加智能,后端管理更加高…

项目安全性与权限管理实践与探讨

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一. 身份验证和授权 二. 输入验证和过滤 2.1. 添加O…

C语言-printf和scanf的区别详解

fprintf(指定的格式写到文件里面。适用于所有的输出流,可以打印在屏幕上面)fscanf(指定的格式读取出来,适用于所有的输入流) fprintf(指定的格式写到文件里面) 两个函数是一样的 打开…

广和通发布基于高通高算力芯片的具身智能机器人开发平台Fibot

3月29日,为助力机器人厂商客户快速复现及验证斯坦福Mobile ALOHA机器人的相关算法,广和通发布具身智能机器人开发平台Fibot。作为首款国产Mobile ALOHA机器人的升级配置版本,开发平台采用全向轮底盘设计、可拆卸式训练臂结构,赋予…

黑马鸿蒙笔记2

1.图片设置: 1 加载网络图片,申请权限。 申请权限:entry - src - resources - module.json5 2 加载本地图片 ,两种加载方式 API 鼠标悬停在Image, 点击show in API Reference interpolation:看起来更加清晰 resou…

【JavaSE】java刷题--数组练习

前言 本篇讲解了一些数组相关题目(主要以代码的形式呈现),主要目的在于巩固数组相关知识。 上一篇 数组 讲解了一维数组和二维数组的基础知识~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎…

网站怎么免费获取HTTPS证书?

申请HTTPS证书可以按照以下简单步骤进行: 1. 确定证书类型 根据你的网站性质和需求,选择合适的HTTPS证书类型。常见的有: - DV(域名验证)证书:适用于个人网站或小型项目,只需验证域名所有权&…

计算机网络—UDP协议详解:特性、应用

​ 🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:マリンブルーの庭園—ずっと真夜中でいいのに。 0:34━━━━━━️💟──────── 3:34 🔄 ◀…

Linux---命令行参数

一、命令行参数 在介绍命令行参数前,我想问大家一个问题,在以前写C/C时,main 函数可不可以带参数? 答案是可以带的,int main(int argc, char* argv[]){},但平时写代码时也证明了,main 函数的参…

uniapp对接极光推送(国内版以及海外版)

勾选push,但不要勾选unipush 国内版 网址:极光推送-快速集成消息推送功能,提升APP运营效率 (jiguang.cn) 进入后台,并选择对应应用开始配置 配置安卓包名 以及ios推送证书,是否将生产证书用于开发环境选择是 ios推送证书…

五款常用在线JavaScript加密混淆工具详解:jscrambler、JShaman、jsfack、ipaguard和jjencode

摘要 本篇技术博客将介绍五款常用且好用的在线JavaScript加密混淆工具,包括 jscrambler、JShaman、jsfack、freejsobfuscator 和 jjencode。通过对这些工具的功能及使用方法进行详细解析,帮助开发人员更好地保护和加密其 JavaScript 代码,提…

Linux学习教程 Linux入门教程(超全面 超详细)收藏这一篇就够了

Linux是什么? linux是一个开源、免费的操作系统,其稳定性、安全性、处理多并发能力已经得到业界的认可,目前大多数企业级应用甚至是集群项目都部署运行在linux操作系统之上,很多软件公司考虑到开发成本都首选linux,在…

【NFS】NFS使用汇总

1. NFS介绍 NFS(Network File System),网络文件系统,它可以让不同主机能够通过 TCP/IP 网络共享资源。它从宏观主体上简化来看,就是两部分:服务端和客户端。 服务端,可以认为它就是来存东西的,这个东西对…

蓝桥杯刷题_day7_动态规划_路径问题

文章目录 DAY7下降路径最小和最小路径和地下城游戏 DAY7 下降路径最小和 【题目描述】 给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元…

【Java面试题】Redis中篇(高可用:主从复制、哨兵、集群)

文章目录 高可用14.Redis如何保证高可用?15.Redis的主从复制?16.Redis主从有几种常见的拓扑结构?17.Redis的主从复制原理了解吗?18.说说主从数据同步的方式?19.主从复制存在的问题?20.Redis Sentinel(哨兵)…

信息素养和社会责任

1.信息素养: 信息素养是一种了解、收集、评估、和利用信息的知识结构能力。 信息素养的四个要素:信息意识,信息知识,信息能力,信息道德 信息意识是先导(前提),是对关键信息具有持…

elementui的table根据是否符合需求合并列

<el-table :data"tableData" border style"width: 100%;" :span-method"objectSpanMethodAuto"><!-- 空状态 --><template slot"empty"><div><img src"/assets/images/noData.png" /></di…

基于SSM+Jsp+Mysql的母婴用品网站

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

新能源汽车充电桩主板的常见故障及解决办法

电桩主板作为充电桩的核心组件&#xff0c;直接影响着充电桩运行的安全性与稳定性。然而&#xff0c;在使用过程中&#xff0c;充电桩主板会因多种原因而出现一些故障情况&#xff0c;了解这些原因并采取相应的应对方法对维护充电桩的正常运行起着至关重要的作用。接下来&#…

3-zookeeper之ZAB协议

Zookeeper ZAB协议 概述 ZAB(Zookeeper Automic Broadcast)是一套专门为Zookeeper设计的用于进行原子广播和崩溃恢复的协议ZAB协议主要包含了两个功能 原子广播&#xff1a;保证数据一致性崩溃恢复&#xff1a;保证集群的高可用 ZAB协议本身是基于2PC算法来进行的设计&#…