【问题标题】:INSERT ON DUPLICATE KEY UPDATE multiple rows, checking duplicate for each rowINSERT ON DUPLICATE KEY UPDATE 多行,检查每一行的重复项
【发布时间】:2018-07-09 22:12:49
【问题描述】:

以下代码的预期行为是,对于每一行,它检查是否有重复,如果有,它会更新而不是插入。它分别为每一行执行此操作,这意味着为某一行查找重复项不会导致后续所有其他行的更新。唯一键是 member_id。

INSERT INTO table 
  (member_id, member_name, stat1, stat2) VALUES 
    ('1', 'user1', '1411', '1410'), 
    ('15', 'user2', '177', '179'), 
    ('83', 'user3', '517', '832'), 
    ('184', 'user4', '805', '1165'), 
    ('304', 'user5', '708', '705')
ON DUPLICATE KEY UPDATE 
  stat1 = VALUES(stat1), 
  stat2 = VALUES(stat2)

然而,这似乎是从第一次发现 member_id 的重复键的那一刻起进行更新。

例如user2 已经存在,所以不要插入,而是执行更新。但随后它会为 user3、user4、user5 进行更新,即使它们可能不存在。这会导致以下错误:

Unknown column 'user3' in 'field list'

如何确保它检查每一行的重复项,如果没有重复项,则插入?

编辑: 我的查询更准确的 sn-p:

INSERT INTO reputation_p_month (member_id, member_name, january_2018_rep, acc_january_2018_rep) VALUES
  ('1', 'GreatJackal', '1411', '1410'),
  ('15', 'wetletus', '177', '177'), 
  ('83', 'strongandbald', '517', '517'),
  ('14375', 'Newer', '0', '0'), 
  ('14379', 'RobsenMeister', '0', '0'), 
  (14405, Griffin, 0, 0) 
ON DUPLICATE KEY UPDATE 
  january_2018_rep = VALUES(january_2018_rep), 
  acc_january_2018_rep = VALUES(acc_january_2018_rep)

在控制台出现以下错误:

Uncaught SyntaxError: missing ) after argument list

'调试对象:更新 REP 记录时出错:'字段列表'中的未知列 'Griffin''

【问题讨论】:

  • 尝试重写它而不使用“VALUES”,而是使用“SET”语法。 (一次一个)
  • 很高兴你想通了 - StackOverflow 的“Syntax-Highligting”会告诉你,Griffin 被认为是列名而不是值 - 如果你发布了“真实”代码而不是伪代码——这是“偶然正确的”(假设)——我们可以更快地帮助你。:-)
  • 是的,我使用伪代码的原因是因为实际查询相当冗长,我错误地假设错误不在提供的值中。我的坏:P

标签: php mysql database insert rows


【解决方案1】:

您的查询非常好,应该完全产生您期望的结果。

错误信息

Unknown column 'user3' in 'field list'

实际上意味着,您的查询在某些时候将Value: user3 视为column

从发布的查询中,我们无法确定问题所在,我猜你以某种方式简化/混淆了查询,但 postet 示例是偶然正确的。

检查,如果您要插入 user3 的用户值并用反引号括起来,例如

`user3`

而不是

'user3'

(反引号用于 COLUMN 名称,而不是值,这会产生您所面临的错误消息)

【讨论】:

  • 我刚刚用更准确的代码 sn-p 编辑了我的帖子(值的前端和结束部分)。我认为最后一部分缺少一些单引号大声笑...
  • 好的,现在按预期工作 :) 感谢您的帮助!
  • @JorenBroekema 从“帮助”到“帮助自己”——这是最有价值的事情!
猜你喜欢
  • 2017-04-24
  • 2015-07-30
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 2013-10-03
相关资源
最近更新 更多