最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-09 19:27:35
文档

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

MySQL中使用INNERJOIN来实现Intersect并集操作_MySQL:MySQL中使用INNER JOIN来实现Intersect并集操作一、业务背景我们有张表设计如下:CREATE TABLE `user_defined_value` ( `RESOURCE_ID` varchar(20) DEFAULT NULL, `COLUMN_NAME` varchar(20) DEFAULT NULL, `
推荐度:
导读MySQL中使用INNERJOIN来实现Intersect并集操作_MySQL:MySQL中使用INNER JOIN来实现Intersect并集操作一、业务背景我们有张表设计如下:CREATE TABLE `user_defined_value` ( `RESOURCE_ID` varchar(20) DEFAULT NULL, `COLUMN_NAME` varchar(20) DEFAULT NULL, `

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是资源的唯一标识

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翻译翻译结果或

文档

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

MySQL中使用INNERJOIN来实现Intersect并集操作_MySQL:MySQL中使用INNER JOIN来实现Intersect并集操作一、业务背景我们有张表设计如下:CREATE TABLE `user_defined_value` ( `RESOURCE_ID` varchar(20) DEFAULT NULL, `COLUMN_NAME` varchar(20) DEFAULT NULL, `
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top