【问题标题】:Insert data from other table and update on duplicate key从其他表插入数据并更新重复键
【发布时间】:2011-10-02 05:32:52
【问题描述】:

我有这个查询,我想从表 home 中插入表 exp_channel_data 数据,但它插入 7 和 8 个条目,然后返回错误:

[Err] 1062 - 键“PRIMARY”的重复条目“8”

这是我的查询(我将字段缩减为可读):

INSERT INTO exp_channel_data (entry_id,site_id,channel_id,field_id_1)  SELECT 7,1,1,summary FROM homes ON DUPLICATE KEY UPDATE entry_id = entry_id+1

【问题讨论】:

  • 桌子上的主键和唯一键是什么?
  • entry_id 是主键吗?我认为您正在尝试通过增加 id 来插入具有相同 id 的新记录,但这当然是行不通的。 ON DUPLICATE KEY UPDATE entry_id = entry_id+1 将更改已经在表上的记录的entry_id,而不是将要插入的记录。
  • 在 exp_channel_data 上,主要是没有 auto_increment 的 entry_id,而在家庭中,主要和 auto_increment 是 id 字段。在 exp_channel_data 中已经有一些 entry_id = 2,3,4,5,6 的条目,这就是为什么我开始选择 7
  • @Shef 如何更改要插入的那个。我想从 home 表中取出所有条目并将它们插入到 exp_channel_data 表中
  • homes 表有哪些字段?

标签: mysql


【解决方案1】:

如果您想将所有homes 表数据复制到新表中:

INSERT INTO exp_channel_data 
    (entry_id, site_id, channel_id, field_id_1) 

  SELECT homes_id + (COALESCE(maxExp,0) + 1 - minHomes)
       , site_id, channel_id, summary 
  FROM homes AS h
    CROSS JOIN
      ( SELECT MAX(entry_id) AS maxExp
        FROM exp_channel_data
      ) AS mh
    CROSS JOIN
      ( SELECT MIN(homes_id) AS minHomes
        FROM exp_channel_data
      ) AS me

【讨论】:

  • 为什么选择homes_id?
  • 您说要将所有数据从homes 复制到exp_channel_data
猜你喜欢
  • 2011-10-10
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 2019-01-16
  • 2012-04-21
  • 2021-03-28
  • 2019-02-15
相关资源
最近更新 更多