mysql minus用法和union相同吗

mysql minus用法和union相同吗,第1张

可以用SQL实现同样的功能,就是麻烦了点。

drop table t1

drop table t2

create table t1(id int primary key,nickname varchar(20),playNum varchar(20))

create table t2(id int primary key,nickname varchar(20),playNum varchar(20))

insert into t1 values(1,1,10)

insert into t1 values(2,2,20)

insert into t1 values(3,3,30)

insert into t2 values(1,1,10)

insert into t2 values(2,2,200)

insert into t2 values(3,33,300)

commit

提供过程中涉及的几个问题的思路:

1 删除环节:es_stat_logondays_user 表的数据量是多少,数据超过几十万以上的话,建议使用truncate table (需要支持的mysql版本)或删表重建方式(需要权限支持);

2 查询环节(这个是最重要的环节):优化下insert 中的select 查询吧;

其中的s 虚表的子查询部分先优化下,条件里对字段使用CONCAT应该是忌讳。

(select DISTINCT v.adminId,v.courseId from view_stattologondays_user v ,(

select admin_id,course_id from es_stu_record

where action_type=6 group by admin_id,course_id) e where CONCAT(ifnull(v.adminId,111),ifnull(v.courseId,222))!= CONCAT(ifnull(e.admin_id,111),ifnull(e.course_id,222))

) s

3 插入环节:es_stat_logondays_user 的索引和外键情况如何,尝试在insert 前加上:

set sql_log_bin = 0

set unique_checks = 0

set foreign_key_checks = 0

这个问题是集合减的问题

很可惜 你这个是mysql,只能用not in

select?id?from?客户表

where?id?not?in?

(

select?id?from?数据表1?WHERE?上传数据时间>now()-7

union

select?id?from?数据表2?WHERE?上传数据时间>now()-7

union

select?id?from?数据表3?WHERE?上传数据时间>now()-7

union

select?id?from?数据表2?WHERE?上传数据时间>now()-7

)

如果你使用的是oracle,还有效率更高的方法,用关键字minus

select?id?from?客户表

minus

select?id?from?数据表1?WHERE?上传数据时间>sysdate-7

minus

select?id?from?数据表2?WHERE?上传数据时间>sysdate-7

minus

select?id?from?数据表3?WHERE?上传数据时间>sysdate-7

minus

select?id?from?数据表2?WHERE?上传数据时间>sysdate-7

或者sqlserver使用关键字except

select?id?from?客户表

except

select?id?from?数据表1?WHERE?上传数据时间>getdate()-7

except

select?id?from?数据表2?WHERE?上传数据时间>getdate()-7

except

select?id?from?数据表3?WHERE?上传数据时间>getdate()-7

except

select?id?from?数据表2?WHERE?上传数据时间>getdate()-7

以上


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6117504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-15
下一篇 2023-03-15

发表评论

登录后才能评论

评论列表(0条)

保存