我试图在一个查询中插入多个数据。
INSERT INTO tableName (`ITEM`, `QUANTITY`)
VALUES
('PAPER', '1'),
('PENCIL', '1'),
('FOLDER', '1'),
('PEN', '1'),
('ERASER', '1')
这很管用。基本上,它所做的就是为每个条目(或者上面看到的‘纸’、‘铅笔’等条目)插入一条记录。
我现在的问题是如果记录已经存在怎么办?我不想插入一个新的记录有相同的细节作为已经存在的一个。
我想弄清楚在重复密钥更新时是如何遇到和的。
以下是我的新查询:
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上做这个。另外,我还试图避免使用存储过程。
2条答案
按热度按时间s5a0g9ez1#
您可以在sql server中使用“merge”语句,请查看以下链接:https://www.red-gate.com/simple-talk/sql/learn-sql-server/the-merge-statement-in-sql-server-2008/
nmpmafwu2#
您遇到了一个奇怪的情况,您要更新的值没有传入。
假设
ITEM
是独一无二的:这也假设
QUANTITY
是一个数字。数字常量周围不需要单引号。