gpt4 book ai didi

mysql - 首先检查辅助字段来删除重复项

转载 作者:行者123 更新时间:2023-11-30 00:29:10 25 4
gpt4 key购买 nike

我有一个带有字段(名称)的表,我想在其上创建唯一索引,但似乎存在重复项。我不想只是摆脱欺骗,因为有些人可能拥有我需要的其他领域的信息。基本上我有:

  • 身份证
  • 家长ID
  • 姓名
  • 代码
  • 相关ID

所以目标 1 是我想保留在 ID 和名称之外的辅助字段中具有值的记录。在大多数情况下,这只是骗局之一。

目标 2 是为了防止两个相同的名称都有值,但在不同的字段中,我想“合并”这些名称,因为很可能一个重复名称在一个关键字段中具有值,另一个在另一个关键字段中具有值。

最后,目标 3 是指两个名称在关键字段中都有值的情况,我可能希望首先手动检查这些值。

在我看来,当我读到这篇文章时,我的第一步就是目标 3;手动检查名称字段相同且多个记录在关键字段中具有非空/非空值的重复项。

一旦我解决了这个问题,目标将是“仅”剩余的记录,即保留一条记录,其中包含名称以及其他记录中的任何非空/非空键字段。

非常感谢任何想法。

最佳答案

听起来是一个可靠的计划 - 希望您有一个可以在其中进行试运行的开发环境。

这里有一些代码可以帮助您

从第 3 步开始。此声明应该可以帮助您找到需要审核哪些记录。

SELECT * 
FROM (
SELECT name,
GROUP_CONCAT(DISTINCT parentID) AS parentID,
GROUP_CONCAT(DISTINCT code) AS code,
GROUP_CONCAT(DISTINCT RelatedID) AS RelatedID,
FROM foo
GROUP BY name
HAVING COUNT(*)>1) as summarized
WHERE parentID LIKE '%,%'
OR code LIKE '%,%'
OR RelatedID LIKE '%,%';

在弄清楚为什么同一字段有多个值后,您可能必须手动修复该查询中出现的任何问题。

一旦这些修复到位,就到了合并的时候了。我将创建一个具有正确值的保留/临时表。 MAX 应该处理选择非空值的逻辑

CREATE TABLE foo_values
SELECT name, MAX(parentID) as parentID, MAX(code) AS code, MAX(RelatedID) AS RelatedID.
FROM foo
GROUP BY name
HAVING COUNT(*)>1;

理论上,现在您已经有了合并后的值。您可以使用您最熟悉的任何技术删除重复的名称行(请参阅 here ),同时添加唯一索引。最后,通过 JOINing 回 foo 值来更新辅助字段。

关于mysql - 首先检查辅助字段来删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22646003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com