MySQL 从 SELECT 中更新字段

标签 mysql select

我想更新表中匹配一些条件的一些结果(即其他表中的变量与 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 。意味着 SELECTUPDATE 查询中的处理方式相同。

关于更新的注释

SELECT 语句中的 FOR UPDATE 子句实际上并不执行任何与更新相关的操作...它仅收集对行。您仍然需要使用适当的 UPDATE 查询来执行所有必要的 JOINS 和 WHERE(可能与您的 SELECT 相同)

关于MySQL 从 SELECT 中更新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12125024/

相关文章:

带有选择查询的postgresql多重插入

sql - sap hana - 选择顶级表达式

mysql - 如何从行中选择几个单元格并将它们显示在一列中?

javascript - 如何创建带有不同样式单词的 html 选项标签?

mysql - SELECT ... INTO OUTFILE 性能

mysql - 通过 SQL 命令显示 MySQL 主机

MySQL 添加带有 null 的列明显长于默认值 ""

android - 如何在Android应用程序中创建登录页面?

php - 您甚至还需要数据库安全吗?

mysql : Get comma delimited Output