MySQL根据列值相同的不同值更新值



我有一个数据库,其中有超过2个mil记录,其中有一个表users,其中有这些列

`id`      
`UserID`
`UserType`
  • id是一个自动增量
  • UserID-包含用户的ID
  • UserType-包含New或Returning值,有时为N/A

如果UserID已经存在于以前的记录中,我想要实现的是将UserType值更新为Returning。

如本例所示:

id | UserID  | UserType
-----------------------------
100 | 2258558 | New
101 | 9999999 | New
102 | 1111111 | New
103 | 2258558 | New
104 | 2258558 | New
105 | 2258558 | N/A

因此,查询必须将行103、104、105更新为返回,因为UserID已经存在于行100上。

如果我知道,那就相当容易了

update users set UserType='Returning' where UserID='2258558' and id!='100'

问题是,我需要使用数千个唯一的UserID来运行它。所以我在想,如果以某种方式首先区分所有唯一的值,然后对其余的行运行它,这是否可能,但我不知道如何做到

感谢

您可以在UPDATE中使用联接。将任意一行u2与具有相同用户且更早的行u1进行匹配。如果存在这样的行u1,则u2一定不是第一个。因此CCD_ 10可以被更新。

UPDATE users AS u1 JOIN users AS u2 
ON u1.UserID = u2.UserID AND u1.id < u2.id
SET u2.UserType = 'Returning';

注意,我还没有测试过这个,所以在将它应用于真实数据之前,请在一些样本数据上自行测试,以确保它符合您的要求。

最新更新