MySQL中使用INNER JOIN来实现Intersect并集操作
来源:互联网 发布:万能网络监控客户端 编辑:程序博客网 时间:2024/06/05 03:53
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翻译翻译结果
或
1 0
- MySQL中使用INNER JOIN来实现Intersect并集操作
- mysql操作 Left join , Right Join, Inner Join
- SQL中使用update inner join和delete inner join
- SQL中使用update inner join和delete inner join
- SQL中使用update inner join和delete inner join
- SQL中使用update inner join和delete inner join.
- SQL中使用update inner join和delete inner join.
- SQL中使用update inner join和delete inner join
- SQL中使用update inner join和delete inner join
- 【MySQL】MySQL中链接查询inner join与left join使用
- mysql中left join,right join,inner join用法
- mysql中left join、right join、inner join的区别
- MYSQL中 inner join left join right join的区别
- mysql中left join right join inner join用法
- mysql中left join,right join,inner join的区别
- 【SQL】 delete update中使用inner join
- SQL中使用update inner join
- MySql中inner join和left join的特殊情况
- 二叉树的递归遍历和非递归遍历
- DICOM3.0影像文件中的平面和立体坐标信息
- mahout入门
- java对byte数组解压缩(zip,gzip,bzip2,jzlib)
- PHP 高级教程
- MySQL中使用INNER JOIN来实现Intersect并集操作
- MYSQL 常见字符长度
- uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )
- nginx实现url重写-rewrite实例参考
- windows 之PHP.INI配置:文件上传功能配置教程
- 【iOS】Xib的使用与File'Owner总结
- 两个activity界面间跳转切换动画效果
- 初级报表生成饼状图,条形图,柱状图
- 解决新建Support7Demos的sample时出现编译错误和运行报错出现的问题