我正在尝试在单个查询中插入多个数据。
INSERT INTO tableName (`ITEM`, `QUANTITY`)
VALUES
('PAPER', '1'),
('PENCIL', '1'),
('FOLDER', '1'),
('PEN', '1'),
('ERASER', '1')
这有效。基本上,它所做的只是针对每个条目(或如上图所示的“ PAPER”,“ PENCIL”等项目),它只是将其作为一条记录插入。
我现在的问题是,如果记录已经存在怎么办?我不想插入一条新记录,该记录的详细信息与现有记录相同。
我正在尝试弄清楚如何进行重复密钥更新。
这是我的新查询:
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上工作。另外,我试图避免使用存储过程。
答案 0 :(得分:2)
您遇到一种奇怪的情况,您要更新的值没有传入。
假设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
是一个数字。数值常数周围不需要单引号。
答案 1 :(得分:0)
您可以在SQL Server中使用“合并”语句,请检查以下链接: https://www.red-gate.com/simple-talk/sql/learn-sql-server/the-merge-statement-in-sql-server-2008/