0

我想更新一个匹配几个条件的表中的一些结果(即来自其他表的变量以匹配 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;

注意: UPDATE score_test SET ... WHERE 不能满足我的需要,因为我需要收集满足 SELECT 语句的结果

但它没有用。它更新了我所有的字段。我正在寻找的是一种用于仅更新 SELECT 语句中的结果的语法。

我的数据库分为 10-15 个表,并且条件可能会有所不同,因为我必须更新一些严格完成某些条件的字段,这些条件依赖于其他表的查询。

4

2 回答 2

3

SQLUPDATE语句接受WHERE子句,就像SELECT语句一样:

UPDATE score_test SET name='Test' WHERE score=20000;

编辑

您还可以将跟随的部分视为与跟随的部分大致UPDATE相同,这意味着您可以进行连接:SELECTFROM

UPDATE score_test 
  JOIN test ON test.id=score_test.test_id
SET score_test.name = 'Test'
WHERE score_test.score=20000

这方面的提示在UPDATE 文档中,它使用table_reference语法定义中的符号。的语法在 JOIN 页面上table_reference定义。意味着和查询中的相同处理。SELECTUPDATE

注意事项FOR UPDATE

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

于 2012-08-25T19:40:48.013 回答
0

有多种方法可以完成您的要求。满足您的问题的最简单方法就是进行更新。

UPDATE score_test SET name='Test' WHERE score=20000;

如果要满足来自多个表的条件,可以在更新语句中使用连接,就像选择语句一样。

如果您有如此复杂的用例,您可以进一步实现您的目标,方法是创建一个包含要编辑的项目的 ID 的临时表,并通过多个查询逐个剔除该表,DELETE直到获得所需的集合更新。

于 2012-08-25T19:42:21.710 回答