只用一个查询更新多行?

时间:2013-06-04 15:43:28

标签: mysql

我有以下数据:

id = 1
name = 'john'

id = 2
name = 'jimmy'

有没有办法只使用一个查询来更新我的表?

Table
id | name
1  | johnny
2  | james

2 个答案:

答案 0 :(得分:5)

您可以使用CASE

实现此目的
UPDATE YourTable
SET    name = CASE
                WHEN id = 1 THEN 'johnny'
                ELSE 'james'
              END
WHERE  id IN ( 1, 2 ) 

或另一种可能性(SQL Fiddle

UPDATE YourTable a
JOIN
   ( SELECT 1 AS id, 'johnny' AS name
     UNION ALL
     SELECT 2 AS id, 'james' AS name
   ) b ON 
   b.id = a.id
SET a.name = b.name;

答案 1 :(得分:1)

Martin Smith的解决方案无疑是少数行的最佳解决方案。如果要更新更多行,最好使用不同的值发出多个UPDATES,可能需要准备好的语句。

为了好玩,我设计了另一个解决方案:

  • 创建一个临时MEMORY
  • 将您的值插入此表(如果正确构建插入查询,可以一次性完成)
  • 使用以下查询更新主表:UPDATE your_table JOIN temp_table ON (<insert JOIN condition here>) SET your_table.field1 = temp_table.field1, your_table.field2 = temp_table.field2

这闻起来很香。认真。使用准备好的UPDATE