基于INT列值更新SQL数据库重复字段

时间:2018-01-25 18:48:33

标签: mysql sql

我的MySQL数据库中有一个名为VARCHAR的{​​{1}}列和一个名为firstname的{​​{1}}列。我想根据INT的值找到所有重复的行,并根据它更改另外两列 allcount列值。

这就是现在的样子:

firstname

我想实现这个目标:

allcount

所以我不想删除重复项,我只想设置id | firstname | allcount | address | email 1 | John Doe | 3234 | some data | johndoe@randomfakeemailxy.com 2 | John Doe | 31 | some data | johndoe@randomfakeemailxy.com 值较小的地址和电子邮件字段。

基于其他问题,我可以在这个SQL命令中找到重复项:

id   |  firstname    |  allcount | address   |  email
1    |   John Doe    |    3234   | some data |  johndoe@randomfakeemailxy.com  
2    |   John Doe    |      31   | empty     |  empty

我还可以使用以下代码更新字段:

allcount

但是,我无法链接两个片段并根据allcount值更新字段(仅在select firstname, count(firstname) as myCount from mytable group by firstname having myCount > 1 order by myCount; 值较小的情况下更新)。我真的很感激,如果有人能告诉我正确的解决方案,我该如何做到这一点。如果还有其他更简单的解决方案,我也会喜欢它。

1 个答案:

答案 0 :(得分:0)

您希望更改除每个名称的第一行之外的所有内容。在MySQL中,使用join

update mytable t join
       (select firstname, min(id) as min_id
        from mytable 
        group by firstname
        having count(*) > 1 
       ) tt
       on t.firstname = tt.firstname and t.id > t.min_id
    set address = 'empty',
        email = 'empty';

请注意,子句中set的使用。 and是可以接受的 - 并且不做你想要的任何事情(它将表达式视为布尔表达式)。