【问题标题】:For duplicate records, set value mysql对于重复记录,设置值mysql
【发布时间】:2018-12-16 18:09:57
【问题描述】:

我在 mysql 中有一个如下所示的表:

BusinessName ABN Status CountOfRecordsPerBusinessName
abccompany   123 Registered 2
abccompany   null Deregistered 2

如果企业名称重复,并且 ABN = null 表示已注销,但不为 null 表示已注册状态,我想将空 ABN 设置为 123。

我该怎么做?

【问题讨论】:

    标签: mysql join null duplicates fill


    【解决方案1】:

    我们可以在这里尝试更新自我加入:

    UPDATE yourTable t1
    INNER JOIN yourTable t2
        ON t1.BusinessName = t2.BusinessName AND
           t1.ABN IS NULL AND
           t2.ABN IS NOT NULL
    SET t1.ABN = t2.ABN;
    

    这里的基本思想是将ABNNULL 的给定业务记录与ABN 不是NULL 的同一业务记录连接起来。然后,将非 NULL ABN 值从第二条记录拉到第一条记录。我们不必担心意外更新非重复项,因为这些连接条件总是会失败。

    【讨论】:

    • hmm.. 我有超过 200 万条记录,有没有更快的查询?
    • 您可能会发现向BusinessNameABN 列添加索引会加快更新速度。我们也可以尝试使用索引加入物化视图,但在我们走这条路线之前,请尝试添加索引并使用上述查询。
    • 谢谢蒂姆。这很难做到,因为 BusinessName 和 ABN 是很多字符,所以很难索引。
    • 我能想到的唯一优化涉及索引。
    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2016-05-28
    • 1970-01-01
    • 2014-03-18
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多