mysql如何求两个查询的交集


本文摘自PHP中文网,作者coldplay.xixi,侵删。

mysql求两个查询交集的方法:首先查满足单组变量键值对的流程实例id;然后将每个变量键值对作为条件都分别查出对应的流程实例id;最后对这两组流程实例id取交集,这样得到的就是想要的结果了。

更多相关免费学习推荐:mysql教程(视频)

mysql求两个查询交集的方法:

一、项目需求:

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

二、详细说明:

1、流程变量表act_hi_varinst

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

bc668d1fe12a4525d676cbb3b0f9e2e.png

图1

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

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

9b52869d7dfe10c60ae2053085348d6.png

图2

三、代码实现

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

1

2

3

4

5

6

7

8

9

10

11

SELECT

ahv.PROC_INST_ID_,

ahv.NAME_,

ahv.TEXT_

FROM

act_hi_varinst ahv

WHERE

(ahv.NAME_, ahv.TEXT_) IN (

('formId', '142'),

('approveType', 'sealApply')

);

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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;

以上就是mysql如何求两个查询的交集的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

mysql无法连接出现错误提示10061怎么办

mysql 高可用架构之 mmm 架构

docker案例分析搭建mysql数据库服务

mysql搜索引擎及其区别

mysql存储过程的深入讲解(in、out、inout)

连接mysql时提示10038怎么处理

如何开启mysql的binlog日志

mysql 重命名表的操作方法及注意事项

怎么查看mysql版本

mysql 建立分区的两种方式介绍(代码示例)

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...