有条件删除sql数据的部分内容
来源:百度知道 编辑:UC知道 时间:2024/05/18 09:20:10
能讲解一下吗?
说实在的……还是没理解,我描述有问题,对不起,谢谢你的回答。我说的电话号码,都是在一个表中,而且不止一种区号,并且区号于电话号码之间没有空格(我给例子给错了)。就是要去掉一种区号7位的号码,而且不删除这种区号的8位号码
这样说吧,我现在手里有个excel 表格,表格里的电话号码都需要从数据库里删除,要怎么删。
你这里是两个表对比,我只有一个表啊
至于区号,我就删除一种区号下的7位号码
是我导入的表,一开始导入错了,制作源表的时候少添了一位,后来又把正确的导入了,现在就出现一个7位号码,一个8位号码,差距就是少最后一个数字,比如01231234567是导错的,012312345678是正确的,需要删除01231234567.需要删除7位的,保留8位的。
假设表的主键为id
DELETE a
WHERE (id IN
(SELECT m.id
FROM a AS m INNER JOIN
a AS n ON SUBSTRING(m.电话号码, 1, 4) = SUBSTRING(n.电话号码, 1, 4) AND m.id <> n.id
WHERE (DATALENGTH(m.电话号码) < 13) AND (DATALENGTH(n.电话号码) > 12)))
----------------------------------------------------------------
m,n是表的两个别名
删除满足以下4个条件的m表中的记录,
1,m n两表主键id不相等,指代同一表中的不同记录。
2,SUBSTRING(m.电话号码, 1, 4) = SUBSTRING(n.电话号码, 1, 4) ,两条记录的电话号码的前4位相等,即区号一致。
3,n表的那条记录的电话号码字段长度必须大于12,即4位区号+1位空格+8位电话号码=13
4,m表的那条记录的电话号码字段长度必须小于13,即4位区号+1位空格+7位电话号码=12
改成
DELETE a
WHERE (id IN
(SELECT m.id
FROM a AS m ,a AS n
where SUBSTRING