【问题标题】:MySql UPDATE only one of the duplicate recordsMySql UPDATE 仅重复记录之一
【发布时间】:2010-11-19 06:20:35
【问题描述】:

我有一个客户信息数据库。帐单地址和送货地址有单独的行,并带有一个标志,表明它是哪个;文学士,SA。许多记录都设置为 BA,因此我为每个客户都有重复记录。我需要为 SA 设置重复记录。 我试过了,但它更新了所有重复的记录。相反,我只想更新其中一条重复记录;

UPDATE customer1 AS C1 JOIN
(
SELECT Ca.user_id, C2.CID, Ca.address_type FROM
customer1 AS Ca JOIN
customer2 AS C2 ON CC.user_id = C2.CID
GROUP BY Ca.user_id
    HAVING COUNT(*) > 1
) AS C2a ON
C1.user_id = C2.CID
SET C1.address_type = 'SA'

【问题讨论】:

  • 你能发布你的表架构吗?

标签: mysql group-by duplicates


【解决方案1】:
...
LIMIT 0,1

请注意,正如其他人所说,首先您的数据库中不应该有重复的行 - 这意味着您的架构是错误的。此外,您会在没有 ORDER BY 的情况下使用 LIMIT 收到警告

【讨论】:

    【解决方案2】:

    就数据库而言,重复记录是无法区分的。

    我认为您最好的选择是为每条记录添加一个自动生成的 ID(请参阅 auto_increment)。然后您可以唯一标识您要更新的记录。

    另一种选择是从其中一个副本复制数据,删除它们,插入一条记录,然后插入另一条并进行所需的更改。

    【讨论】:

      【解决方案3】:

      您应该规范化表架构以避免重复数据。

      意思是,我建议一个包含所有地址的“地址”表 并通过字段 BA_address 和 SA_address 扩展“客户”表,指向这些地址。

      如果您现在需要将记录从 BA“复制”到 SA,只需将相同的 addressID 放入 SA 字段中,就像在 BA 字段中一样。

      【讨论】:

        猜你喜欢
        • 2017-05-08
        • 1970-01-01
        • 2013-01-02
        • 1970-01-01
        • 1970-01-01
        • 2012-09-14
        • 1970-01-01
        • 2014-03-18
        • 2013-07-18
        相关资源
        最近更新 更多