我想更新表中匹配一些条件的一些结果(即其他表中的变量与 SELECT 语句匹配)
我在网上发现了类似的东西:
START TRANSACTION;
SELECT * FROM score_test,score_2,score_3, etc WHERE score=20000 AND score_test.id=score_2.id AND etc.. FOR UPDATE;
UPDATE score_test SET name='Test';
COMMIT;
注意:更新 Score_test SET ... WHERE 不能满足我的需求,因为我需要收集满足 SELECT 语句的结果
但是没有成功。它更新了我的所有字段。我正在寻找的是一种用于仅更新 SELECT 语句中的结果的语法。
我的数据库分为 10-15 个表,条件可能会有所不同,因为我必须更新一些字段,这些字段严格满足某些依赖于其他表查询的条件。
最佳答案
SQL UPDATE
语句接受 WHERE
子句,就像 SELECT
语句一样:
UPDATE score_test SET name='Test' WHERE score=20000;
编辑
您还可以将 UPDATE
之后的部分视为与 FROM
之后的 SELECT
部分大致相同,这意味着您可以执行连接:
UPDATE score_test
JOIN test ON test.id=score_test.test_id
SET score_test.name = 'Test'
WHERE score_test.score=20000
这方面的提示位于 the UPDATE documentation ,它在语法定义中使用 table_reference
符号。 table_reference
的语法定义为 on the JOIN page 。意味着 SELECT
和 UPDATE
查询中的处理方式相同。
关于更新
的注释
SELECT
语句中的 FOR UPDATE
子句实际上并不执行任何与更新相关的操作...它仅收集对行。您仍然需要使用适当的 UPDATE
查询来执行所有必要的 JOINS 和 WHERE(可能与您的 SELECT
相同)
关于MySQL 从 SELECT 中更新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12125024/