MySQL5.7高级函数:JSON_ARRAYAGG和JSON_OBJECT的使用

news2024/11/25 23:48:37

前置准备

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`
(
    `id`                     bigint(20)                                                              NOT NULL,
    `name`                   varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci            NOT NULL                 DEFAULT ''          COMMENT '姓名',
	`relative_ids`	         json															         NOT NULL		                              COMMENT '亲人',
	`friend_ids`	         varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci			 NOT NULL		          DEFAULT ''          COMMENT '朋友',
    `sex`                    int                                                                     NOT NULL                 DEFAULT 0           COMMENT '性别 1:男,2:女',
    `object_id`              bigint(20)                                                              NOT NULL                 DEFAULT 0           COMMENT '对象id',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB
  CHARACTER SET = utf8mb4
  COLLATE = utf8mb4_general_ci COMMENT = '用户表';
INSERT INTO `t_user` VALUES (1, '张伟', '[]', '3,4', 1, 5);
INSERT INTO `t_user` VALUES (2, '李明', '[4, 5]', '', 1, 0);
INSERT INTO `t_user` VALUES (3, '王强', '[]', '', 1, 4);
INSERT INTO `t_user` VALUES (4, '雨婷', '[]', '', 2, 3);
INSERT INTO `t_user` VALUES (5, '蕾蕾', '[]', '', 2, 1);

数据分析

1、王强和雨婷、张伟和蕾蕾互为情侣

2、王强和雨婷都是张伟的朋友

3、雨婷和蕾蕾都是李明的亲人  

需求实现

1、查询出“李明”的个人信息以及他的亲人信息

SELECT
	usr.id,
	usr.NAME,
	usr.relative_ids,
	(
	SELECT
		JSON_ARRAYAGG( JSON_OBJECT( 'id', relative.id, 'name', relative.NAME ) ) 
	FROM
		t_user relative 
	WHERE
		relative.id IN ( SELECT relative_ids.id FROM JSON_TABLE ( usr.relative_ids, '$[*]' COLUMNS ( id BIGINT PATH '$' ) ) AS relative_ids ) 
	) AS relative_infos,
	usr.friend_ids,
	usr.sex,
	usr.object_id 
FROM
	t_user usr 
WHERE
	id = 2

2、查询出“张伟”的个人信息以及他的朋友信息

SELECT
	usr.id,
	usr.NAME,
	usr.relative_ids,
	(
	SELECT
		JSON_ARRAYAGG( JSON_OBJECT( 'id', friend.id, 'name', friend.NAME ) ) 
	FROM
		t_user friend 
	WHERE
		FIND_IN_SET( friend.id, usr.friend_ids ) > 0 
	) AS friend_infos,
	usr.friend_ids,
	usr.sex,
	usr.object_id 
FROM
	t_user usr 
WHERE
	id = 1

3、查询出“有对象”的个人信息以及他(她)的对象信息

SELECT
	usr.id,
	usr.NAME,
	usr.relative_ids,
	( SELECT JSON_OBJECT( 'id', object.id, 'name', object.NAME ) FROM t_user object WHERE object.id = usr.object_id ) AS object_info,
	usr.friend_ids,
	usr.sex,
	usr.object_id 
FROM
	t_user usr 
WHERE
	usr.object_id != 0

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

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

相关文章

Unity - 实践: Metallic流程贴图 转 Specular流程贴图

文章目录 目的Metallic Flow - SP - 输出输出的 MRA (MGA) 贴图 Metallic->Specular (根据教程一步一步实践)1. Base color Metallic -> Diffuse2. Base color Metallic -> Specular3. Roughness -> Glossiness输出贴图,在 unity 中展示:M…

内网测速工具-LibreSpeed

github链接: https://github.com/librespeed/speedtest-android

如何系列 如何使用OpenCV进行图像操作

文章目录 简介集成代码示例加载和显示图像编辑和保存图像边缘检测图片属性图像旋转图像缩放图像拼接颜色空间转换图像模糊平滑化腐蚀和膨胀直方图均衡化图像分割模板匹配图像特征提取图像拟合图像标注轮廓检测背景减除图像混合颜色分割图像旋转裁剪在图像上写文字检测和裁剪人脸…

大模型Tuning分类

类型总结 微调(Fine-tunning) 语言模型的参数需要一起参与梯度更新 轻量微调(lightweight fine-tunning) 冻结了大部分预训练参数,仅添加任务层,语言模型层参数不变 适配器微调 (Adapter-t…

Java项目-文件搜索工具

目录 项目背景 项目效果 SQLite的下载安装 使用JDBC操作SQLite 第三方库pinyin4j pinyin4j的具体使用 封装pinyin4j 数据库的设计 创建实体类 实现DBUtil 封装FileDao 设计scan方法 多线程扫描 周期性扫描 控制台版本的客户端 图形化界面 设计图形化界面 项目…

PyTorch - 模型训练损失 (Loss) NaN 问题的解决方案

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/133378367 在模型训练中,如果出现 NaN 的问题,严重影响 Loss 的反传过程,因此,需要加入一些微小值…

什么是 Spring Boot?与传统 Spring 框架的区别

什么是 Spring Boot?与传统 Spring 框架的区别 引言 Spring框架是一个在Java应用程序开发中广泛使用的框架,它提供了一种构建企业级Java应用程序的强大方式。然而,Spring框架在一些方面存在复杂性和繁琐的配置,这促使Spring社区…

leetcode:561. 数组拆分(python3解法)

难度:简单 给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。 返回该 最大总和 。 示例 1: 输入:nums [1,4,3,2] 输出…

软件设计模式系列之十八——迭代器模式

1 模式的定义 迭代器模式是一种行为型设计模式,它允许客户端逐个访问一个聚合对象中的元素,而不暴露该对象的内部表示。迭代器模式提供了一种统一的方式来遍历不同类型的集合,使客户端代码更加简洁和可复用。 2 举例说明 为了更好地理解迭…

护眼灯买哪种好?分享五款护眼灯

家里顶灯太暗了且高度太高,还是原始的LED灯,晚上用着眼睛都有点难受,还好遇到了儿童护眼灯。下面小编为大家介绍下儿童护眼灯哪个牌子好?什么护眼台灯比较专业 1、色温 台灯的色温也是一个需要考虑的因素,所谓的色温其…

数学建模常用模型

作为数学建模的编程手还掌握一些各类模型常用算法,数学建模评价类模型、分类模型、预测类模型比较常用的方法总结如下: 接下来对这些比较典型的模型进行详细进行介绍说明。 一、评价模型 在数学建模中,评价模型是比较基础的模型之一&#x…

云部署家里的服务器

1.固定静态ip 查看ip地址,en开头的 ifconfig查看路由器ip,via开头的 ip route修改配置文件 cd /etc/netplan/ #来到这个文件夹 sudo cp 01-network-manager-all.yaml 01-network-manager-all.yaml.bak #先备…

ChatGPT架构师:语言大模型的多模态能力、幻觉与研究经验

来源 | The Robot Brains Podcast OneFlow编译 翻译|宛子琳、杨婷 9月26日,OpenAI宣布ChatGPT新增了图片识别和语音能力,使得ChatGPT不仅可以进行文字交流,还可以给它展示图片并进行互动,这是一次ChatGPT向多模态进化的…

基于微信小程序的物流快递信息查询平台同城急送小程序(亮点:寄件、发票申请、在线聊天)

文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

css画一条0.5px的直线

【css】画一条0.5px的直线_css画一条0.5px的直线_a堅強的泡沫的博客-CSDN博客 一些用来装饰的图形,比如字体的前面或者后面设置图标,画一条线 如果要画很细很细的线,0.5px ,怎么画 用到css3的transform的scaleY(0.5)函数,对象图…

机器人中的数值优化|【七】线性搜索牛顿共轭梯度法、可信域牛顿共轭梯度法

机器人中的数值优化|【七】线性搜索牛顿共轭梯度法、可信域牛顿共轭梯度法 Line Search Newton-CG, Trust Region Newton-CG 往期回顾 机器人中的数值优化|【一】数值优化基础 机器人中的数值优化|【二】最速下降法,可行牛顿法的python实现,以Rosenbro…

快速简单制作Mac系统ISO格式镜像之macOS Sonoma

ISO格式的镜像其实没有什么制作难度,下面苹果系统之家教大家怎么快速简单制作ISO格式的镜像,教程使用到的都是Mac官方的命令。制作好的ISO格式镜像可以用于虚拟机安装或者制作到U盘或者直接在Mac里面打开安装升级。 准备系统镜像 首先下载好macOS 镜像…

如何将matlab中的mat矩阵文件在python中读取出来

先安装hdf5storage这个包 pip3 install hdf5storage 然后在当前目录下放入要读取的mat文件 # 将matlab中的mat文件读取出来 import hdf5storagedata hdf5storage.loadmat(inputWeights.mat) print(data[inputWeights])

C# 自定义控件库之Lable组合控件

1、创建类库 2、在类库中添加用户控件(Window窗体) 3、控件视图 4、后台代码 namespace UILib {public partial class DeviceInfoV : UserControl{public DeviceInfoV(){InitializeComponent();ParameterInitialize();}#region 初始化private void Par…

SVM(下):如何进行乳腺癌检测?

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…