我的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;
值较小的情况下更新)。我真的很感激,如果有人能告诉我正确的解决方案,我该如何做到这一点。如果还有其他更简单的解决方案,我也会喜欢它。
答案 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
是可以接受的 - 并且不做你想要的任何事情(它将表达式视为布尔表达式)。