我的代码中出现了一个错误,它允许重复的条目出现在数据库表中,但具有不同的大小写.我正在使用MySQL.
例如,在这个例子中,第二行不应该被添加,但它是.
ID Name Description
-------------------------------------
1 HELLO WORLD Saying hello
2 Hello world Saying hello
Run Code Online (Sandbox Code Playgroud)
为了补救不正确的数据,我想删除重复发生时全名大写的行.我可以在SQL中使用正则表达式,这是最好的解决方案,我该怎么做?
该表全文如下
'ADDRESSBOOK_GROUP','CREATE TABLE
ADDRESSBOOK_GROUP(IDint(10)unsigned NOT NULLNAMEdefault''0 '', varchar(255)collate utf8_unicode_ci NOT NULL,DESCRIPTIONtext collate utf8_unicode_ci,ADDRESSBOOK_IDint(10)default NULL,TYPEint(10)unsigned NOT NULL default ''1',PRIMARY KEY(ID),KEYADDRESSBOOK_ID(ADDRESSBOOK_ID))ENGINE = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC'
编辑 -我也忘了早些时候提到我只想在ADDRESSBOOK_ID为'6'时发生重复检查;
以下选择存在双精度数的所有大写值
delete t.* from table_name t
inner join (
select distinct t.id
from table_name t
left join table_name t2
on t2.col_name = t.col_name
where t.col_name LIKE BINARY UPPER(t.col_name)
) as a
on a.id = t.id;
Run Code Online (Sandbox Code Playgroud)
编辑:
delete t.* from ADDRESSBOOK_GROUP t
inner join (
select distinct t.ID
from ADDRESSBOOK_GROUP t
left join (
select
count(*) as n,
NAME,
ADDRESSBOOK_ID
from ADDRESSBOOK_GROUP
group by
NAME,
ADDRESSBOOK_ID
) as t2
on t2.name = t.name
and t2.ADDRESSBOOK_ID = t.ADDRESSBOOK_ID
left join ADDRESSBOOK_GROUP t_n
on t_n.ID = t.ID
and t_n.NAME REGEXP ('^[0-9]+$')
where
t.NAME like binary upper(t.NAME)
and t_n.ID is null
and t2.n > 1
) as a
on a.ID = t.ID
where t.ADDRESSBOOK_ID = 6;
Run Code Online (Sandbox Code Playgroud)