微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更新 MySQL 插入字段......在重复密钥更新

如何解决更新 MySQL 插入字段......在重复密钥更新

我有一个有点长的 MysqL ETL 语句,我将 32 列数据插入到一个表中。此 ETL 语句也使用 UNION 作为派生表。

我的代码与此类似,在MysqL参考手册中定义:

INSERT INTO t1 (a,b,... "32 columns total")
SELECT * FROM
  (SELECT a,... FROM t2
        LEFT JOIN t3 on t2.id = t3.id
   UNION
   SELECT a,... FROM t2
        RIGHT JOIN t3 on t2.id = t3.id
  ) AS dt
**ON DUPLICATE KEY UPDATE b = b + c**;

问题:使用“On Duplicate Key Update”时,我的目标表中添加了重复的行。我怀疑我没有正确编写最后一行代码

我的问题:我是否需要将表中的 ALL 32 列添加到这个 'On Duplicate Key Update' 语句中?还是列数据可能会发生变化?

提前致谢,我发现 MysqL 参考手册的这一部分令人困惑,而且它们的示例比我的实际场景要简单得多。我已经搜索过,但找不到与我的情况类似的答案或示例。

解决方法

谢谢@Barmar,我很欣赏对话!
事实证明,因为我试图避免这个错误:https://bugs.mysql.com/bug.php?id=58637 我欺骗自己创建了一个无法按预期工作的主键。 ;) 我创建了一个复合主索引,它由一个(自动增量编号,r_id,t_id)组成。由于自动增量编号不是我插入的一部分,它允许行重复。 我更改了我的表索引,因此主索引仍然是自动递增编号,并且有一个新的唯一索引,其中包括(r_id 和 t_id)。这似乎现在起作用了。

我仍然对我的原始问题的一部分感到好奇:在创建“重复密钥更新”语句时...我真的需要包含每个可能更改的字段吗?换句话说......该语句是否评估该语句中的字段的变化?

再次感谢@Barmar!

这是我发布到 stackoverflow 的第一个问题,所以希望我遵循了协议!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。