mysql批量删除,已经获得id,条件是另一个表,不存在的就删除,请问sql语句怎么写?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql批量删除,已经获得id,条件是另一个表,不存在的就删除,请问sql语句怎么写?相关的知识,希望对你有一定的参考价值。
两个表有相同的ID关联字段,A表是供应商,B表示订单表,如果删除A表5条记录,ID分别为1,2,3,4,5,当B表里面有条记录,ID为1,此时值删除A表里面ID 为2,3,4,5
参考技术A delete from Awhere id not in (select id from B);
希望可以帮到你,不过我感觉这条语句效率不会太高。本回答被提问者和网友采纳 参考技术B delete from t_spcst where
SpCstID not in (select SpCstID from T_Order) and
SpCstID between '1208' and '1192'追问
不行
追答delete from t_spcst where
SpCstID not in (select SpCstID from T_Order) and
SpCstID-0 between '1208' and '1192' 试试这个
不行
追答delete t_spcst where
SpCstID not in (select SpCstID from T_Order) and
SpCstID-0 between '1208' and '1192'
between 这个关键字,不能用在这,不合适,,我是选着性的删除,,有可能全部100条记录,,
追答delete from t_spcst a where a.SpCstID not in (select SpCstID from T_Order b) and a.SpCstID in (1208,1192)
试试吧
我是选着行的删除,而不是把所有A表里面没有B表的ID删除,我选着哪一个,就删除哪一个,如果有就不删除,没有就删除
追答delete from A
where id not in (select id from B) and id =选中行的ID
我是用的mysql数据库,执行就报错,而在SQl Server里面就可以用,不知道为什么?
追答delete from A
where not exists (select id from B where id=A.id) and id =选中行的ID
试试这样行不行
delete from t_spcst where SpCstID not in (select SpCstID from T_Order) and SpCstID in ('1208','1192')
这是打印的SQl,并没有报错,但就是没有删除数据
这个 not exists 关键字我用过了,也不行
你确定有 t_spcst 表有记录而T_Order表没有关联的记录吗,SpCstID是什么类型?
追问A表的主键bigint,确定,我都是SQl语句查出来t_spcst 表有的,而T_Order表没有的操作,我觉得与Mysql数据库有关系,奇怪sql Server 里面可以执行,为什么Mysql 里面不能执行呢?
追答bigint类型就不能这么写SpCstID in ('1208','1192') ,不能带引号!
delete from t_spcst where SpCstID not in (select SpCstID from T_Order) and SpCstID in (1208,1192)
还是不行
第一条语句执行返回消息是什么
追问
delete from t_spcst
where not SpCstID in (select SpCstID from T_Order) and SpCstID in (1208,1192)
执行报错呢?
把not 放前面:
delete from t_spcst
where (not SpCstID in (select SpCstID from T_Order)) and (SpCstID in (1208,1192))
再不行的话,可能是你Mysql版本太低,知道里有很多说低版本不支持delete条件用子查询的
mysql批量删除数据方法及注意事项
一、批量删除数据有三种常见的方法
1、drop table
当不需要该表时,可以使用该方法。
2、truncate table
删除所有数据,同时保留表,速度很快。
可以理解为,drop table然后再create table。
3、delete from table
可以删除所有数据,也能保留表,但性能较差。
也可以带where条件删除部分数据,灵活性强。
二、truncate和delete的相同之处:
truncate和delete都能够删除所有数据,且保留表
三、truncate和delete的差异,
1、truncate是DDL语句,它不存在所谓的“事务回滚”;
delete是DML语句,它执行完是可以rollback的。
2、truncate table返回值是0;
delete from table返回值是被删除的行数。
3、InnoDB支持一个表一个文件时:
truncate会一次性把表干掉,且不会激活触发器,速度非常快;
delete from table则会一行一行删除,会激活触发器,速度比较慢。
delete数据,是要记录日志的,truncate表不需要记录日志。
4、当表中有列被其它表作为外键(foreign key)时:
truncate会是失败; delete则会成功。
5、当表中有自增列是:
truncate会使得自增列计数复原;
delete所有数据后,自增列计数并不会复原,而是保持原来的顺序自增。
以上是关于mysql批量删除,已经获得id,条件是另一个表,不存在的就删除,请问sql语句怎么写?的主要内容,如果未能解决你的问题,请参考以下文章
mysql 数据库表批量更新,需要set的数据是另一个表中的字段
mysql 数据库表批量更新,需要set的数据是另一个表中的字段