1

我的代码中出现了一个错误,它允许重复条目出现在数据库表中,但大小写不同。我正在使用 MySQL。

例如,在本例中,不应该添加第二行,但它确实添加了。

    ID    Name          Description
-------------------------------------
    1    HELLO WORLD    Saying hello
    2    Hello world    Saying hello

为了纠正不正确的数据,我想在出现重复的地方删除全名大写的行。我可以在 SQL 中做正则表达式,这是最好的解决方案,我该怎么做?

完整的表格如下

'ADDRESSBOOK_GROUP', 'CREATE TABLE ADDRESSBOOK_GROUP( ID int(10) unsigned NOT NULL default ''0'', NAMEvarchar(255) collat​​e utf8_unicode_ci NOT NULL, DESCRIPTIONtext collat​​e utf8_unicode_ci, ADDRESSBOOK_IDint(10) default NULL, TYPE int(10) unsigned NOT NULL default ''1'', 主键 ( ID), 键 ADDRESSBOOK_ID( ADDRESSBOOK_ID)) ENGINE=MyISAM 默认字符集=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC'

编辑 -我也忘了之前提到我只希望在 ADDRESSBOOK_ID 为“6”时进行重复检查;

4

1 回答 1

5

以下选择存在双精度的所有大写值

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;

编辑:

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;
于 2012-12-12T11:56:39.973 回答