【问题标题】:Error 1062 Duplicate entry when copying data between tables在表之间复制数据时出现错误 1062 重复条目
【发布时间】:2013-12-04 22:24:45
【问题描述】:

我正在尝试将数据从一个表复制到另一个表。T1、T2 是两个表,它们都设置得当,它们的 PK 都是 UQ。特别是我想将值 R 放入 GZHTable3 中的 Combined_Data 表中。 R 是非唯一的,必须是当 T1.Aid = T2.Gid 时,所以我有:

INSERT INTO Combined_Data (R)    
SELECT T2.R    
FROM GZHTable3 as T2   
JOIN Combined_Data as T1 ON T1.Aid = T2.Gid;

Aid 和 Gid 都是各自表的 UQ 和 PK。据我所知,它是反对的,因为 Aid 和 Gid 都是 PK。

我并不想只复制 T2.R 的值,但它必须在 Aid、Gid 上的两个表之间同步。为什么反对,解决方案是什么? (一些数据在表之间复制,但 R 不是)。

谢谢


澄清一下:

表 1 (T1)

Aid     R       Data fields .....


UQid1   0      ........ data .........
UQid2   0      ........ data .........

表 2 (T2)

Gid     R        Different data fields....


UQid6   R6       ....... data ....
UQid12  R12      ....... data ....
UQid23  R23      ....... data ....
UQid1   R1       ....... data ....

T1、T2 的顺序不一样。对于 T1 中的每个 Aid,我必须在 T2 中找到 Gid 的相应值(例如 UQid1),并将 T2 中该行中 R 的(严格)非零值复制到 T1 中的相应行中。

T2 的所有元素都是非空的,并且就目前的目的而言是数字;而T2远大于T1

【问题讨论】:

  • 我看到的一个危险信号是您正试图在同一个主键值上加入 T1 和 T2?这是如何运作的? T2 应该通过 sep 列 (T2.t1_column_id) 引用 T1,因为两个表中的 PK 应该是互斥的。
  • SELECT DISTINCT T2.R ?
  • 抱歉,我不确定我是否关注。为了使 T2.R 的值与 T2.Gid 的对应值正确,这两个表必须同步。我们通过强加作为 UQ 的 PK 匹配的条件进行同步。
  • 当你说同步时,你指的是复制吗?
  • @ALL 请参阅主要问题中的说明。我希望这个对你有用。完全忽略最后一条评论:-)。

标签: mysql mysql-error-1062


【解决方案1】:

您的问题令人困惑,在最初的帖子中您正在尝试插入,但在编辑中您说:“对于 T1 中的每个 Aid,我必须在 T2 中找到 Gid 的相应值(例如 UQid1)并复制(严格)将 T2 中该行中 R 的非零值写入 T1 中的相应行。”

如果确实是后者,你应该可以这样做:

UPDATE table_1 AS t1 SET t1.value = (SELECT t2.value FROM table_2 AS t2 WHERE t2.UQid1 = t1.id);

【讨论】:

  • 你是对的。应该是更新了。我的术语确实使事情变得混乱。全方位道歉。谢谢迈克。
猜你喜欢
  • 1970-01-01
  • 2011-05-19
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
相关资源
最近更新 更多