我有以下数据:
id = 1
name = 'john'
id = 2
name = 'jimmy'
等
有没有办法只使用一个查询来更新我的表?
Table
id | name
1 | johnny
2 | james
答案 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
。