mysql中如何获取交集

13 篇文章 0 订阅
7 篇文章 0 订阅

一、项目需求:

需要获取包含一些流程变量(数量不确定,且必须都包含,不能只含其中某几个)的流程实例的实例id

二、详细说明:

1.流程变量表act_hi_varinst

字段:PROC_INST_ID_(流程实例id)、NAME_(变量名)、TEXT_(变量值)

图1

2.现在需要查询包含变量formId=142和approveType=sealApply的对应流程的实例id

如图1,只要查出红线框出的值,最终结果为

图2

三、代码实现

1.首先尝试了使用in的写法,查询结果跟图1一样(下面查询语句表达的意思是:找出包含变量值为formId=142或approveType=sealType的流程的实例id,多个变量条件只要有一个满足,就将该行取出来),该方法不可行

SELECT
	ahv.PROC_INST_ID_,
	ahv.NAME_,
	ahv.TEXT_
FROM
	act_hi_varinst ahv
WHERE
	(ahv.NAME_, ahv.TEXT_) IN (
		('formId', '142'),
		('approveType', 'sealApply')
	);

参考链接:https://blog.csdn.net/Guanjs2016/article/details/80237490

2.(可行方案)尝试使用交集(mysql本身没有交集的实现,只能自己模拟实现了)

查询思路:先查满足单组变量键值对的流程实例id,将每个变量键值对作为条件都分别查出对应的流程实例id(当前例子下,会有两组流程实例id),最终对这两组流程实例id取交集,这样得到的就是想要的结果了

SELECT
	PROC_INST_ID_
FROM
	(
		SELECT
			ahv.PROC_INST_ID_
		FROM
			act_hi_varinst ahv
		WHERE
			(ahv.NAME_, ahv.TEXT_) = ('formId', '142')
		UNION ALL
		SELECT
			ahv.PROC_INST_ID_
		FROM
			act_hi_varinst ahv
		WHERE
			(ahv.NAME_, ahv.TEXT_) = ('approveType', 'sealApply')
	) t
GROUP BY
	PROC_INST_ID_
HAVING
	count(PROC_INST_ID_) = 2;

参考链接:https://blog.csdn.net/shuixiou1/article/details/85988924

MySQL可以使用UNION、INTERSECT和EXCEPT(或称为MINUS)来进行并集、交集和差集的操作。 - 并集(UNION):使用UNION操作符可以将两个或多个SELECT语句的结果合并成一个结果集。要求每个SELECT语句选择的列的数量和数据类型必须一致。例如: ``` SELECT column1, column2, column3 FROM table1 UNION SELECT column1, column2, column3 FROM table2; ``` 这将返回table1和table2所有行的并集。 - 交集(INTERSECT):MySQL不直接支持INTERSECT操作符,但可以使用INNER JOIN来实现交集操作。例如: ``` SELECT column1, column2, column3 FROM table1 INNER JOIN table2 ON table1.column1 = table2.column1; ``` 这将返回table1和table2共有的行。 - 差集(EXCEPT):MySQL也不直接支持EXCEPT操作符,但可以使用LEFT JOIN和WHERE子句来实现差集操作。例如: ``` SELECT column1, column2, column3 FROM table1 LEFT JOIN table2 ON table1.column1 = table2.column1 WHERE table2.column1 IS NULL; ``` 这将返回在table1存在但在table2不存在的行。 请注意,以上示例的表名、列名和条件应根据实际情况进行替换。 #### 引用[.reference_title] - *1* [MySQL 查询 并集、交集、差集](https://blog.csdn.net/AI_SupplyChain/article/details/111567920)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [mysql 交集,并集(union),差集](https://blog.csdn.net/qq_39496303/article/details/121314313)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值