我需要更新表的所有记录(不应超过100条记录).每条记录都需要使用不同的值更新字段.
我是否必须对每个更新进行查询,还是有其他方式?我似乎无法立刻想出来
谢谢您的帮助!
编辑:为了澄清,我正在更新的每个字段将包含在客户端确定的唯一值.所以没有涉及其他表格.
答案很大程度上取决于新值的来源.
如果您有一个新值的简短列表,您可以使用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)