MySQL中把not in改成not exists

litescript 发布于 2015/08/24 17:11
阅读 531
收藏 0

delete from xxx where ID not in (1, 5, 12, 33);

求把这句语句中的not in改成用exists或not exists实现

加载中
0
张乐1024
张乐1024

首先你这个固定范围值的过滤不应该使用exists和not exists,除非你的1,5,12,33是某个表内查询出来的值。然后既然你要求写,我就写了一个,测试通过:

#创建表
CREATE TABLE `t1` (
	`ID` INT(10) NULL DEFAULT NULL,
	`C1` INT(10) NULL DEFAULT NULL
);
#插入数据
insert into t1 values (1, '1');
insert into t1 values (2, '2');
insert into t1 values (3, '3');
insert into t1 values (4, '4');
insert into t1 values (5, '5');
insert into t1 values (12, '12');
insert into t1 values (33, '33');
#查询当前表内结果集
select * from t1;
#删除需要删除的数据
#这里使用了虚拟表dual来把1、5、12、33四个值当做一条记录来处理,
#但是mysql中的dual与oracle不一样,
#需要在末尾增加一个条件才不会报错编译错误,
#这样的写法mysql才不会报错编译错误,而且还能满足你的需要
delete from t1 where exists (select ID from 
(select 1 ID from dual where 1 = 1
union 
select 5 ID from dual where 1 = 1
union 
select 12 ID from dual where 1 = 1
union 
select 33 ID from dual where 1 = 1) res where res.id = t1.id);
#再次查询最新的当前表内结果集
select * from t1;




张乐1024
张乐1024
回复 @litescript : 锻炼自己的描述能力!!!
litescript
litescript
回答的好认真
返回顶部
顶部