【问题标题】:insert into select on duplicate mysql query在重复的mysql查询上插入选择
【发布时间】:2018-01-04 02:08:21
【问题描述】:

我正在尝试更新 MySQL 中的重复记录,

我有一个包含许多列的表,但我只想更新另一个表中的某些列,与当前表具有相同的 desc,但它不更新记录。

我的查询是:

插入backup_prochart.symbol_list(ticker,end_date,cur_date) 从 prochart.symbol_list t 中选择ticker,t.end_date,t.cur_date ticker=t.ticker 和 ticker= 'MAY17' 重复密钥更新 end_date=t.end_date,cur_date=t.cur_date;

我尝试的另一个查询

insert into backup_prochart.symbol_list(ticker,end_date,cur_date) select t.ticker,t.end_date,t.cur_date from prochart.symbol_list t where ticker=t.ticker and t.ticker= 'MAY17' on duplicate key update end_date=t.end_date,cur_date=t.cur_date;

谁能告诉我我的查询出了什么问题?

【问题讨论】:

  • 您是否收到错误消息?
  • 我无法重现您的问题查询 1 对我来说很好。你能发布你的表定义吗?

标签: mysql select insert centos on-duplicate-key


【解决方案1】:

您说您正在尝试更新记录,但您使用的是INSERT 语句。你不应该使用UPDATE 而不是INSERT 吗?

INSERTUPDATE的区别可以在here找到

请注意,您可以在单个查询中使用 UPDATESELECT

【讨论】:

  • 先生,有很多行要插入或更新取决于实时情况,我不能对所有行都使用更新。所以在我的情况下它可能没有特别的帮助。
【解决方案2】:

你可以试试:

INSERT INTO backup_prochart.symbol_list (ticker, end_date, cur_date) 
SELECT ticker, end_date, cur_date FROM prochart.symbol_list WHERE ticker = 'MAY17' 
ON DUPLICATE KEY UPDATE end_date = values(end_date), cur_date = values(cur_date);

当然,必须将“ticker”列定义为“backup_prochart.symbol_list”表的唯一列。

【讨论】:

    【解决方案3】:

    试试这个。它对我有用。

    INSERT INTO employee_projects
                (employee_id,
                 proj_ref_code)
    SELECT ep.employee_id,
           ep.proj_ref_code
    FROM   hs_hr_emp_projects_history ep
    WHERE  NOT EXISTS (SELECT 1
                       FROM   employee_projects p
                       WHERE  ep.employee_id = p.employee_id
                              AND ep.proj_ref_code = p.proj_ref_code) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 2014-09-01
      相关资源
      最近更新 更多