gpt4 book ai didi

mysql - SQL插入多个记录/更新现有(在单个查询中)

转载 作者:行者123 更新时间:2023-11-29 05:53:41 26 4
gpt4 key购买 nike

我正在尝试在单个查询中插入多个数据。

INSERT INTO tableName (`ITEM`, `QUANTITY`)
VALUES
('PAPER', '1'),
('PENCIL', '1'),
('FOLDER', '1'),
('PEN', '1'),
('ERASER', '1')

这行得通。基本上它所做的只是针对每个条目(或如上所示的“PAPER”、“PENCIL”等项目),它只是将其作为一条记录插入。

我现在的问题是,如果记录已经存在怎么办?我不想插入与现有记录具有相同详细信息的新记录。

我正在尝试弄清楚重复 key 更新是如何发生的。

这是我的新查询:

INSERT INTO tableName (`ITEM`, `QUANTITY`)
VALUES
('PAPER', '1'),
('PENCIL', '1'),
('FOLDER', '1'),
('PEN', '1'),
('ERASER', '1')
ON DUPLICATE KEY UPDATE ITEM=ITEM, QUANTITY=QUANTITY;

虽然这对插入很有效,但我的问题是所有现有记录都将有一个应该更新的固定值,无法确定哪个记录应该具有指定值作为新数据。

不用说,使用这种方法,我无法确定应该插入什么值作为对特定记录的更新,因为它会更新所有现有数据。

我正在考虑一种类似的方法:

INSERT INTO tableName (`ITEM`, `QUANTITY`)
VALUES
('PAPER', '1') ON DUPLICATE KEY UPDATE ITEM=ITEM, QUANTITY='2',
('PENCIL', '1') ON DUPLICATE KEY UPDATE ITEM=ITEM, QUANTITY='33',
('FOLDER', '1') ON DUPLICATE KEY UPDATE ITEM=ITEM, QUANTITY='19',
('PEN', '1') ON DUPLICATE KEY UPDATE ITEM=ITEM, QUANTITY='28',
('ERASER', '1') ON DUPLICATE KEY UPDATE ITEM=ITEM, QUANTITY='14';

像这样的东西可以帮助我将任意数量的记录插入表中,如果我尝试插入的某个记录已经存在,则会用新数据更新。但是这个当然行不通。

我正在尝试找到一种方法来做这样的事情,因为在单个查询中插入多条记录是一项要求。

注意:我正在 MySQL 上工作。另外,我尽量避免使用存储过程。

最佳答案

你有一个奇怪的情况,你想要更新的值没有被传入。

假设 ITEM 是唯一的:

INSERT INTO tableName (`ITEM`, `QUANTITY`)
VALUES ('PAPER', 1),
('PENCIL', 1),
('FOLDER', 1),
('PEN', 1),
('ERASER', 1)
ON DUPLICATE KEY UPDATE
QUANTITY = (CASE ITEM
WHEN 'PAPER' THEN 2
WHEN 'PENCIL' THEN 33
WHEN 'FOLDER' THEN 19
WHEN 'PEN' THEN 28
WHEN 'ERASER' THEN 14
END);

这还假设 QUANTITY 是一个数字。数字常量不需要单引号。

关于mysql - SQL插入多个记录/更新现有(在单个查询中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51763204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com