如果找不到不存在的密钥,则使用已知密钥更新多行而不插入新行

Kir*_*lla 2 mysql insert

让我们想象一下,我们有表 ...

table: items
item_id INT PRIMARY AUTO_INCREMENT
title VARCHAR(255)
views INT
Run Code Online (Sandbox Code Playgroud)

让我们想象它充满了类似的东西

(1, item-1, 10),
(2, item-2, 10),
(3, item-3, 15)
Run Code Online (Sandbox Code Playgroud)

我想根据从这个数组中获取的数据为这些项目创建多个更新视图[item_id] => [views]

'1' => '50',
'2' => '60',
'3' => '70',
'5' => '10'
Run Code Online (Sandbox Code Playgroud)

重要!请注意我们在数组中有item_id = 5,但我们在数据库中没有item_id = 5.

我可以使用INSERT ... ON DUPLICATE KEY UPDATE,但这样image_id = 5将插入talbe项目.如何避免插入新密钥?我只想跳过item_id = 5,因为它不在表格中.

当然,在执行之前我可以从items表中选择现有的键; 然后与数组中的键进行比较; 删除不存在的密钥并执行INSERT ... ON DUPLICATE KEY UPDATE.但也许有一些更优雅的解决方案?

谢谢.

new*_*ver 5

您可以尝试生成文字表并通过加入表来更新项目:

UPDATE items
    JOIN (SELECT 1 as item_id, 50 as views
          UNION ALL
          SELECT 2 as item_id, 60 as views
          UNION ALL
          SELECT 3 as item_id, 70 as views
          UNION ALL
          SELECT 5 as item_id, 10 as views
          ) as updates
         USING(item_id)
 SET items.views = updates.views;
Run Code Online (Sandbox Code Playgroud)