MeterSphere特殊场景之SQL变量简化复杂业务的多表查询

举报
brucexiaogui 发表于 2021/11/25 22:30:43 2021/11/25
【摘要】 MeterSphere特殊场景之SQL变量简化复杂业务的多表查询 1.概述 场景描述: 在自动化接口测试业务中,某个业务接口的入参是动态的且这个参数无法从业务中其他的接口返回参数中获取,...

MeterSphere特殊场景之SQL变量简化复杂业务的多表查询

在这里插入图片描述

1.概述

场景描述:

  • 在自动化接口测试业务中,某个业务接口的入参是动态的且这个参数无法从业务中其他的接口返回参数中获取,得到这个参数最方便的方法就是通过SQL请求获取我们需要的结果。
  • 在SQL请求中比较复杂的SQL就是跨多个表查询结果,通常我们使用最多的方法就是连接查询,他有个缺点就是当表格大于3个时候,查询语句非常长,且易读性差。

重点概要:

  • 介绍变量查询方式简化连表查询的复杂性,提高SQL语句的易读性。
  • 查询结果返回多个值如何存储到一个变量中。
  • 一个变量有多个值如何作为条件查询。

2.变量基础语法

2.1.基础语法格式

变量的基础语法非常简单,它由两个部分组成。

  • SET:声明要创建的变量
  • @variable:@符号后面跟着变量名称

2.2.变量示例

-- 将查询的结果赋值给table_id 变量
-- 注意查询的语句要放在括号内,作为一个整体对象赋值给变量,否则会报语法错误。
SET @table_id = (SELECT id FROM table WHERE `name`= '变量');

  
 
  • 1
  • 2
  • 3

3.变量简化多表查询

在实际的业务中,我们只掌握简单的变量语法还不能完成一个复杂的业务。下面介绍一个用变量解决复杂业务的案例。
业务场景描述

  • 我们要查询出某个公司下某个部门下的用户信息。
  1. 需要查询公司id,某个部门id
  2. 根据部门id查询公司与用户链接表中的用户id
  3. 根据用户id查询用户表中用户的信息。

3.1.常规方式查询复杂业务

在介绍变量方式前,先看下使用连表查询方式解决复杂业务SQL语句,和变量方式做个对比。

SELECT
	user_name,
	user_id
FROM
	table3
WHERE
	user_id IN (
		SELECT
			user_id
		FROM
			table2
		WHERE
			office_id IN (
				SELECT
					id
				FROM
					table1
				WHERE
					`name` LIKE '%运营部门%'
				AND `company_id` IN (
					SELECT
						id
					FROM
						`table1`
					WHERE
						`name` LIKE '百强公司'
				)
			)
	);


  
 
  • 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

3.2.变量方式查询复杂业务

-- 查询公司id存放到变量。
SET @company_id= (SELECT company_id FROM `table1` WHERE `name`= '百强公司');

-- 查询部门id存放到变量
SET @depart_id = (SELECT id FROM `table1` WHERE top_id= @company_id AND `name` LIKE '%运营部门%' AND is_delete=0);

-- 查询部门员工id存放到变量
-- 注意:这个查询返回的结果是多个值,我们使用GROUP_CONCAT()方法将结果的多个值用逗号分割后存放到变量。
SET @user_id = (SELECT  GROUP_CONCAT(user_id) FROM `table2` WHERE office_id= @depart_id);

-- 调试时候可以输出变量值 SELECT @user_id;

-- 查询员工信息
-- 注意:当变量中有多个值,我们要查询出多个值的结果需要使用FIND_IN_SET()方法,否则只能查询出第一条数据的结果。   
SELECT phone, user_id FROM table3 WHERE FIND_IN_SET (user_id,@user_id); 

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。

原文链接:brucelong.blog.csdn.net/article/details/115297221

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。