本篇文章主要讲解:利用mysql的sql特性,实现对多表查询下,一个用户对应多条记录数据查询为一条数据并以列表形式显示的教程。
日期:2024年6月17日
作者:任聪聪
一、创建数据库表
创建test_a表,内容如下:
创建test_b表,内容如下:
二、填充测试数据
步骤一、点击数据表进入到详情,点击数据生成
步骤二、配置字段类型及信息
提示:记得勾选所有的数据表
步骤三、点击单个字段进行配置规则
end:完成所有配置后点击下一步。
步骤四、查阅自己的测试数据是否正确
注意:这里我们是多的关系,所以一个用户需要多个产品信息及记录,故此尽量填写循环1-100内,使得1000条数据中大部分都是有一个用户多条产品信息的数据。
步骤五、点击开始生成数据
生成完毕:
三、实现查询效果
1、实现查询一个用户显示产品信息为产品1,产品2,产品3
效果:
可以看到,我们通过sql直接将用户关联的产品进行了单独的字段定义,并按照我们的要求进行了输出。
sql实例:
SELECT
a.id,
GROUP_CONCAT(b.product_name SEPARATOR ', ') AS b_list
FROM
test_a A
LEFT JOIN
test_b b ON a.id = b.a_id
WHERE
a.id = 1
GROUP BY
a.id;
2、实现多表查询输出json对象类型-固定字符串
效果:
sql实例:
SELECT
a.id,
JSON_aRRaYaGG(JSON_ObJECT(
b.a_id,
'b.product_name')) aS b_json
FROM
test_a a
LEFT JOIN
test_b b ON a.id = b.a_id
WHERE
a.id = 1
GROUP bY
a.id;
3.实现查询json数据对应的多表关系数据
效果:
sql实例:
SELECT
a.id,
JSON_aRRaYaGG(JSON_ObJECT(
b.a_id,
b.product_name)) aS b_json
FROM
test_a a
LEFT JOIN
test_b b ON a.id = b.a_id
WHERE
a.id = 1
GROUP bY
a.id;
附件:
数据表格创建sql语句:
/*
Navicat Premium Data Transfer
Source Server : mysqlLocal
Source Server Type : MySQL
Source Server Version : 50738 (5.7.38-log)
Source Host : localhost:3306
Source Schema : test
Target Server Type : MySQL
Target Server Version : 50738 (5.7.38-log)
File Encoding : 65001
Date: 17/06/2024 20:37:39
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for test_b
-- ----------------------------
DROP TABLE IF EXISTS `test_b`;
CREATE TABLE `test_b` (
`a_id` int(11) NOT NULL,
`product_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for test_a
-- ----------------------------
DROP TABLE IF EXISTS `test_a`;
CREATE TABLE `test_a` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`reg_time` datetime NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1001 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;