有条件删除sql数据的部分内容

来源:百度知道 编辑:UC知道 时间:2024/05/18 09:20:10
现有表a有一组电话号码“区号+7位数字”和“区号+8为数字”在同一个表中,例如0123 4567890 和0123 45678900,区号一致,但是电话号码部分不同,想要删除区号相同电话为7位的所有号码,保留区号相同8位电话号码,具体怎么做?
能讲解一下吗?
说实在的……还是没理解,我描述有问题,对不起,谢谢你的回答。我说的电话号码,都是在一个表中,而且不止一种区号,并且区号于电话号码之间没有空格(我给例子给错了)。就是要去掉一种区号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