【问题标题】:Create a mysql conditional insert?创建一个mysql条件插入?
【发布时间】:2017-07-27 09:01:45
【问题描述】:

如果table_2 的column_a 中已经存在column_a 的value_a(以及column_b 的value_b = 'x'),我该如何检查table_1?如果它不存在插入它并为 table_2 中缺少的 value_a 创建一个新行?

更新:(似乎可行的是:)

INSERT INTO products
(key, category)
SELECT key, category
FROM accounts
WHERE category = 'vegan'
AND NOT EXISTS (SELECT *
          FROM products
          WHERE accounts.key = products.key);

【问题讨论】:

  • 清理噪音并删除php标签,因为这是关于mysql的。

标签: mysql


【解决方案1】:

为什么不将列转换为主键?您只需要处理重复的输入错误代码

编辑:

这里的解决方案是使用 SELECT 而不是 WHERE(感谢 degr)

INSERT INTO tableA(`id`,`column1`)
SELECT 44,'Value of Column1' -- The values you want to insert
WHERE NOT EXISTS(SELECT * FROM table2 WHERE id=40) -- check that there is no matching with the request
AND 1=1 --additional conditions
AND NOT EXISTS(SELECT * FROM Table3 WHERE id=44);  --additional conditions

【讨论】:

  • 我不能将其用作主键...因为在 500000 条记录中可能有使用相同 unique_id 的记录
  • 好的,那么,您可以执行 INSERT INTO tableA(your,columns) VALUES(your,values) WHERE(SELECT COUNT(*) FROM table2 WHERE columnA=uniqueValue) = 0 这将计算在内表 2 中出现的次数,如果没有出现,则返回 0。
  • 我很挣扎。您能否提供更精确的代码示例?我实际上确实有另一个 where 条件......我只想为某些记录做这件事。请参见上文。
  • INSERTWHERE?
  • 谢谢阿德里安。我快到了。额外的 WHERE 类别 = 'vegan';还没有工作。我在上面更新了。
猜你喜欢
  • 2010-10-29
  • 2012-11-18
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多