特定ID的SQL多行更新

4

我想编写一条查询语句,以一次性更新SQL表中的多行数据。以下是我尝试过的代码,但它似乎不是正确的SQL语句,无法工作。是否有一种方法可以用一条查询语句完成这个操作?

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

1
每个单独的ID值需要一个UPDATE语句... - marc_s
不要把事情搞得太复杂。每个 ID 只需使用一个 UPDATE - Frederick Zhang
3个回答

7
一种方法是使用case表达式:
UPDATE table_name
SET    name = CASE id WHEN 7  THEN 'Bob'
                      WHEN 34 THEN 'Mike'
              END
WHERE  id IN (7, 34)

有趣。最后一行只是预防措施吗?它似乎是多余的。 - Tortooga
@Tortooga 一点也不 - 没有它,你会用“null”更新所有其他“id”的名称! - Mureinik
谢谢!这个解决方案可行。我会尝试一下,看看像这样有很多情况的查询是否存在性能问题。 - Tortooga

2

我发现这个解决方案比使用"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;

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”语句,可以尝试类似这样的语法。

但是我建议使用两个查询来完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接