我有一个数据库,其中有超过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';
注意,我还没有测试过这个,所以在将它应用于真实数据之前,请在一些样本数据上自行测试,以确保它符合您的要求。