MySQL 中 集合的差的 运算 方法
来源:互联网 发布:lol网络环境异常 编辑:程序博客网 时间:2024/04/28 01:28
MySql只支持Union(并集)集合运算,好像也是4.0以后才有的;
但是对于交集Intersect、差集Except,就没有实现了。
一般的解决方案用in和not in来解决,小量数据还可以,但数据量大了效率就很低了。
其实,可以使用Union来实现另外两种的运算,当然是没有办法的办法。
差集Except:
SELECT ID FROM (
SELECT DISTINCT A.AID AS ID FROM TABLE_A A
UNION ALL
SELECT DISTINCT B.BID AS ID FROM TABLE_B B
)TEMP GROUP BY ID HAVING COUNT(ID) = 1
交集Intersect:
SELECT ID FROM (
SELECT DISTINCT A.AID AS ID FROM TABLE_A A
UNION ALL
SELECT DISTINCT B.BID AS ID FROM TABLE_B B
)TEMP GROUP BY ID HAVING COUNT(ID) = 2
不过,上述方法的功能也有限,
只能用来检查某个id是不是A、B表中都存在,
或者只存在于A、B表其中之一,
并不能对id在某表中多次出现做出检查。
而且,差集是有先后之分,这里没有。
2. http://hi.baidu.com/truetruelove/blog/item/f0fda8441bf22048510ffeba.html
1。求两表差集, ewb_t_books 是图书表,ewb_t_title是图书分类表,通过bt_titleid(not null)连接。
找出分类不存在的图书
a.子查询使用not in
#explain extended
SELECT book_id,bt_titleid
FROM ewb_t_books b
WHERE bt_titleid NOT IN (SELECT bt_titleid FROM ewb_t_title)
#show warnings;
b.子查询 not exists
#explain extended
SELECT book_id,bt_titleid
FROM ewb_t_books b
WHERE NOT EXISTS (SELECT * FROM ewb_t_title a WHERE b.bt_titleid= a.bt_titleid )
#show warnings;
c.左连接判断右表is null
#explain extended
SELECT book_id,bt_titleid
FROM ewb_t_books LEFT JOIN ewb_t_title b USING (bt_titleid)
WHERE ISNULL(b.bt_titleid)
#show warnings;
总结:简单测试了一下,not in最慢,其他两个平分秋色,有待考证。
select * from employee where salary<>3000;
对这个查询,可以改写为不使用NOT:
select * from employee where salary<3000 or salary>3000;
虽然这两种查询的结果一样,但是第二种查询方案会比第一种查询方案更快些。第二种查询允许数据库对salary列使用索引,而第一种查询则不能使用索引。
- MySQL 中 集合的差的 运算 方法
- 集合的交 并 差 补 运算
- 集合的交、并、差运算
- 集合的并、交和差运算
- matlab-高数 集合的运算:差
- Fxxking dataStructure_ 集合的交并差运算
- multiset集合容器的集合运算:并、交、差
- 集合的并、交和差运算的程序
- c++项目--集合的并差交综合运算
- 两个集合的差
- 集合的差集
- Java中list集合的交集和差集的用法和如何将数组转换为集合的方法
- 集合的表示、并查集的数组存储方式和集合的差并运算
- 几何画板表现两集合的差集的方法
- 集合运算(完成集合的并、交、差(输出被减集合的剩余元素))
- 集合扩展方法、委托的运算、事件
- Oracle中关于并集/交集/差集的运算
- 弗雷曼链码的差分运算
- Centos 安装 Oracle
- hdu 3572 最大流isap模版 邻接表写。。
- 汉诺塔问题(递归与分治)
- 9、交叉编译libxml2
- IE 不支持单引号(')的实体名称(&apos;)
- MySQL 中 集合的差的 运算 方法
- Struts 各种老版本下载地址列表
- JAVASE----03----面向对象编程
- 10、交叉编译fontconfig
- Android环境建立之编译Android内核源码笔记---2
- 04 RadioGroup
- Linux 文件存储结构
- hdu 2255 二分图—最优匹配
- ios code或xib下实现按键或触摸背景关闭虚拟键盘