当前位置:   article > 正文

一文教你使用sql快速查询1对多数据关系,生成一个多维数据!_sql 多表查询 一对多

sql 多表查询 一对多

本篇文章主要讲解:利用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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

附件:

数据表格创建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;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/994483
推荐阅读
相关标签
  

闽ICP备14008679号