【问题标题】:Update 2nd duplicate value in mysql table?更新mysql表中的第二个重复值?
【发布时间】:2019-08-16 11:53:06
【问题描述】:

我的用户表中有 52k 行记录。在该表中 user_hash 列有大约 2000 个重复值。我想更新 user_hash 列的第二个重复值。下表 user_id (3, 10), (5, 14) 具有相同的值,我想更新 user_id 10 和 14 的值。如何使用 MySQL Qry 更新它?

--------------------------------
user_id user_hash   user_status
--------------------------------
1   ae57250b    1
2   310cb4e0    1
3   28b365c7    1
4   0073265b    1
5   8bec42a9    1
6   00a5c443    1
7   e1c27b19    1
8   993dc301    1
9   8fc8a6bf    1
10  28b365c7    1
11  194714c0    1
12  4611d83a    1
13  277a426b    1
14  8bec42a9    1
15  740c1412    1
... ...     ...
... ...     ...
... ...     ...

我用来检查重复条目的以下qry

SELECT user_hash, COUNT(user_hash) 
FROM user_data 
GROUP BY user_hash 
HAVING COUNT(user_hash) > 1;

【问题讨论】:

  • 你想把它更新成什么?
  • 你好尼克,将新的唯一哈希更新到 user_hash 列

标签: php mysql


【解决方案1】:

首先想到的是,您可能想要定义一个约束,以便将来您不能在不想要它们的地方使用非唯一值。

第二件事是确保这些哈希不能合法地碰撞/重叠。

抛开这些想法(因为它们可能与您的用例无关):

update user_data set user_data.user_hash = STORED_PROC_FOR_HASH()
from (
    select *, row_number() over(partition by user_hash order by (select null)) row_num  
    from user_data 
) user_data 
where row_num > 1 

上述查询的来源:https://stackoverflow.com/a/25090251/3080207

正如 Nick 所暗示的,您需要能够生成一个唯一的哈希,这几乎是该问题的第二个组成部分。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2017-07-11
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    相关资源
    最近更新 更多