mysql 批量查询到的id列表,是否有被另外一张表的字段所包含(包含一个即可)

2022-09-06 11:45:57

最近重构了下滴滴的用例平台的目录结构,因为那个目录实在维护起来太难受了,一旦新增用例都得去维护一个这个json, 所以还是把这个json拆出来了,结果拆出来以后,遇到了一个数据丢失的问题。

我们先看下看下用例的表的设计

在这里插入图片描述

而原本的用例的逻辑是可以关联多个文件夹,所以这里的存储就是可能是多个目录id, 用 进行隔开存储。

一开始没有考虑这个问题时,我的sql查询是这样子的,为了能够知道一个目录下(包含他的子目录)有多少条用例

select
	idfrom
	test_casewhere
	biz_idin(select
		idfrom
		biz_v2where
		id="6dbc73d6"or parent_tree_codelike CONCAT("%","6dbc73d6","%")and is_delete=0and product_line_id="012d59e2c4bc12e0f15e1dd4e472a179")and is_delete=0

从上面的sql 就会发现当test_case 中的biz_id 是关联了多个目录的情况的话,这个数据就会被丢失掉。

那要怎么解决这个问题呢,这个问题最麻烦的点就在于 目录id 查询出来是多条数据 所以 这里的biz_id 就不能用like 那么简单了。

查询了很久, 才发现,原来 where 条件里面其实是可以用到 中间临时表的字段的。

select
	idfrom
	test_case a,(select
		idas biz_v2_idfrom
		biz_v2where
		id="6dbc73d6"or parent_tree_codelike CONCAT("%","6dbc73d6","%")and is_delete=0and product_line_id="012d59e2c4bc12e0f15e1dd4e472a179") bwhere
	biz_idlike concat("%", b.biz_v2_id,"%")

将查出的临时表中的 biz_v2_id 做有变量做 like即可

  • 作者:saii
  • 原文链接:https://blog.csdn.net/qq744746842/article/details/126414275
    更新时间:2022-09-06 11:45:57