MySQL:有没有办法在一个查询中更新整个表?

use*_*237 5 mysql

我需要更新表的所有记录(不应超过100条记录).每条记录都需要使用不同的值更新字段.

我是否必须对每个更新进行查询,还是有其他方式?我似乎无法立刻想出来

谢谢您的帮助!

编辑:为了澄清,我正在更新的每个字段将包含在客户端确定的唯一值.所以没有涉及其他表格.

Bil*_*win 7

答案很大程度上取决于新值的来源.

如果您有一个新值的简短列表,您可以使用CASE:

UPDATE Table1
SET column1 = CASE column1
              WHEN 123 THEN ?
              WHEN 456 THEN ?
              ELSE ?
              END;
Run Code Online (Sandbox Code Playgroud)

如果新值列表很长,则这不实用.

如果需要使用另一个表的相关行中存在的值更新行,则可以使用MySQL的多表UPDATE语法:

UPDATE Table1 JOIN Table2 ON (Table1.pk = Table2.fk)
SET Table1.column1 = Table2.column2;
Run Code Online (Sandbox Code Playgroud)

您还可以使用相关子查询执行类似操作.

UPDATE Table1 SET column1 = (SELECT column2 FROM Table2 WHERE Table2.fk = Table1.pk);
Run Code Online (Sandbox Code Playgroud)

很久以前,当我使用MySQL 3.23(在它支持多表更新或子查询之前)之前,我会运行一个SELECT输出是完全形成的UPDATE语句.获取所有引号是很棘手的,但结果是一个包含数百个单独UPDATE语句的SQL脚本,每个语句都在一行中更改值.不是很有效,但如果只是不经常做,那很好.

SELECT CONCAT(
  'UPDATE Table1 SET column1 = ', QUOTE(Table2.column2), 
  ' WHERE pk = ', Table2.fk, ';') AS SQL_statement
FROM Table2;
Run Code Online (Sandbox Code Playgroud)