• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySQL中使用INNER JOIN来实现Intersect并集操作_MySQL

mysql 搞代码 4年前 (2022-01-09) 30次浏览 已收录 0个评论
文章目录[隐藏]

MySQL中使用INNER JOIN来实现Intersect并集操作

一、业务背景

我们有张表设计如下:

CREATE TABLE `user_defined_value` (  `RESOURCE_ID` varchar(20) DEFAULT NULL,  `COLUMN_NAME` varchar(20) DEFAULT NULL,  `VALUE` varchar(255) DEFAULT NULL,  KEY `ID_IDX` (`RESOURCE_ID`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;

RESOURCE_ID是资源的唯本文来源gao@dai!ma.com搞$代^码!网7一标识

COLUMN_NAME是资源的一个属性名称

VALUE是资源的属性值

二、需求

现在需要从表中查出属性A=’1’且属性B=’2’的资源ID

三、分析

这里需要查的是同时满足两个属性的资源ID,如果是或的关系,那么SQL会很简单

SELECT DISTINCT RESOURCE_ID FROM USER_DEFINED_VALUE WHERE (COLUMN_NAME = 'A' AND VALUE in ('1'))  OR (COLUMN_NAME = 'B' AND VALUE in ('2'))

当是且关系时,这里并不能简单的将OR关键字换成AND,需要先把满足每个属性的资源查出来,再取并集

在百度上查到SQL Server和Oracle都支持Intersect,可以直接将两个相同结构的查询结果取交集,而MySQL并没有Intersect关键字,那么我们可以如何实现呢?

四、使用INNER JOIN xxx USING xxx

SELECT DISTINCT RESOURCE_ID FROM USER_DEFINED_VALUE INNER JOIN (SELECT DISTINCT RESOURCE_ID FROM USER_DEFINED_VALUE WHERE  (COLUMN_NAME = 'A' AND VALUE in ('1')) ) t0 USING (RESOURCE_ID) INNER JOIN (SELECT DISTINCT RESOURCE_ID FROM USER_DEFINED_VALUE WHERE  (COLUMN_NAME = 'B' AND VALUE in ('2')) ) t1 USING (RESOURCE_ID)

第一句话会查出表中所有的资源ID

第二句话或查出属性A=’1’的资源ID,并和第一句话的查询结果取交集

第三句话或查出属性B=’2’的资源ID,并和前面的查询结果取交集

这样,还可以继续加其他的属性

复制去Google翻译翻译结果或


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL中使用INNER JOIN来实现Intersect并集操作_MySQL

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址