【问题标题】:SQL update multiple rows on specific ID'sSQL 更新特定 ID 上的多行
【发布时间】:2022-01-02 19:29:49
【问题描述】:

我正在尝试编写一个查询来一次更新我的 SQL 表的几行。下面是我尝试过的代码,它似乎不是正确的 SQL,因为它不起作用。有没有办法完成这个是一个查询?

$query = "UPDATE table_names
          SET Name='Bob' WHERE ID=7 
          SET Name='Mike' WHERE ID=34"

【问题讨论】:

  • 一个 UPDATE 语句用于每个单独的 ID 值 ...
  • 不要把事情搞得这么复杂。只需为每个 ID 使用一个 UPDATE

标签: sql sql-update


【解决方案1】:

一种方法是使用case 表达式:

UPDATE table_name
SET    name = CASE id WHEN 7  THEN 'Bob'
                      WHEN 34 THEN 'Mike'
              END
WHERE  id IN (7, 34)

【讨论】:

  • 有趣。最后一行只是预防性的吗?这似乎是多余的。
  • @Tortooga 根本没有 - 没有它,您将使用 nulls 更新所有其他 ids 的名称!
  • 谢谢!此解决方案有效。我会试一试,看看有很多这样的案例的查询是否存在性能问题。
【解决方案2】:

我建议使用 2 个查询来执行此操作:

UPDATE table_names
SET Name='Bob' WHERE ID=7

UPDATE table_names
SET Name='Mike' WHERE ID=34

您可以在一个查询中执行此操作,但我认为这不是正确的方法:

INSERT table_name 
KEYS (id, `name`)
VALUES (7, 'Bob'), (34, 'Mike')
ON DUPLICATE Key UPDATE

类似的东西,如果你真的在寻找一个查询,找到如何使用“on duplicate”

但我建议使用 2 个查询。

【讨论】:

    【解决方案3】:

    这个解决方案比我发现的“case when”更实用,你可以根据需要更新尽可能多的列

    UPDATE searches_group_library
    SET compiled_query = new_val.compiledq
    FROM (VALUES 
            (28, 'fakecompilation'),
            (57, 'fakecompilation2')
    ) new_val (id, compiledq)
    WHERE new_val.id = searches_group_library.id;
    

    【讨论】:

      猜你喜欢
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 2022-01-04
      • 2023-02-25
      • 1970-01-01
      相关资源
      最近更新 更多