【问题标题】:SQL Inserting Multiple Records / Updates Existing (In Single Query)SQL 插入多条记录/现有更新(在单个查询中)
【发布时间】:2019-01-16 16:39:08
【问题描述】:

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

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 上工作。另外,我试图避免使用存储过程。

【问题讨论】:

  • MySQL 有存储过程。你以前试过吗?
  • @FrankAK - 我之前使用 Microsoft SQL Server Management Studio 尝试过存储过程,但没有使用 MySQL。但无论如何,我想在不依赖存储过程的情况下做到这一点。

标签: mysql sql


【解决方案1】:

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

假设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 是一个数字。数字常量不需要单引号。

【讨论】:

    【解决方案2】:

    您可以在 SQL Server 中使用“Merge”语句,请查看以下链接: https://www.red-gate.com/simple-talk/sql/learn-sql-server/the-merge-statement-in-sql-server-2008/

    【讨论】:

    • 问题是关于 MySQL 的。
    猜你喜欢
    • 2017-03-12
    • 2013-12-13
    • 2017-01-03
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多