Sql 如何使用select语句的结果更新表中的列,该语句将更新的行作为where子句的一部分?

Sql 如何使用select语句的结果更新表中的列,该语句将更新的行作为where子句的一部分?,sql,Sql,这个SQL语句示例非常接近我所需要的 update table1 set value1 = x.value1 from (select value1, code from table2 where code = something) as x 但是,我需要做的是将上面示例中的“something”更改为正在更新的行中的值 例如,我尝试了这个,但没有成功: update table1 A set value1 = x.value1 from (

这个SQL语句示例非常接近我所需要的

 update table1 set value1 = x.value1 from 
      (select value1, code from table2 
       where code = something)  as x 
但是,我需要做的是将上面示例中的“something”更改为正在更新的行中的值

例如,我尝试了这个,但没有成功:

 update table1 A set value1 = x.value1 from 
      (select value1, code from table2 
       where code = A.something)  as x 
这是一次更新现有表的操作,我并不是真的在寻找高性能的方法。任何能够完成任务的解决方案都已经足够好了

编辑以进行澄清


我正在使用Microsoft SQL Server 6.5

编辑

从那以后,有几个聪明的人告诉我,这里发布的许多答案都应该有效。我的特定sql语句比我在示例中使用的伪sql复杂得多。由于某种原因,我尝试过的答案(大多数)都不起作用。同样聪明的人也不明白他们为什么不工作

我选择的答案确实对我有用。未来的寻求答案者可能应该看看下面的几个其他答案,以帮助解决他们自己的问题,而不仅仅是解决我问题的答案。

试试这个

UPDATE table1 AS a
SET value1 = x.value1
FROM table2 AS x
WHERE x.code = a.something

听起来应该是这样的:

Update table1 Set value1 = 
( Select value1
  From table2 
  Where table2.code = table1.something
)

众所周知,不同DBMS之间的更新是不同的。但不妨尝试以下几点:

UPDATE Table1 SET Value1 =
  (SELECT Value1 FROM Table2 WHERE code = Table1.Something)
“我正在使用Microsoft SQL Server 6.5”?? 为什么? 您为什么不免费获得SQL 2008 Express edition,或者如果您符合资格,SQL 2008 Developers edition只需大约50美元

UPDATE Table1, Table2
SET Table1.Value1 = Table2.Value1
WHERE Table2.Code = Table1.Something
这有帮助吗?

试试这个:

update table1
set value1 = x.value1
from table2 x
where something = x.code

你有没有试过这样的方法:-

UPDATE table1 
SET x.Value1=y.Value1
FROM Table1 x INNER JOIN 
Table2 y ON x.Code=y.Something

这类似于我的第一次尝试。当我尝试这个方法时,我得到了一个“A附近的语法不正确”。@帆船柔道:我已经编辑了我的答案,但现在它和拉里·卢斯蒂格的差不多。如果
table1
不是您真正的表名,您确定第一行和最后一行都替换了吗?我也试过这个。我收到消息“列前缀'Table1'与查询中使用的表名或别名不匹配”。这是指select中的“Table1”。这可能是最可移植的解决方案-它甚至可以在Firebird中工作,Firebird根本不支持自更新。我很惊讶它在SQLServer6.5中不起作用;不幸的是,我手头没有一个可以测试的安装。表1和表2之间有什么关系吗?也许我们可以使用内部联接来联接两者,以更新表1中的一列。让我知道。@Ashish-你在回答中几乎明白了。谢谢@约翰·范·齐尔:欢迎来到StackOverflow!既然你没有提供答案,你应该把它作为对问题的评论而不是答案。谁知道呢。也许数据库嵌入了一些航海硬件?如果一个人的编程问题的解决方案涉及到购买新的硬件和/或软件,那么他在这个行业就走不了多远。这是一个运行良好的现有数据库服务器。我很确定Express版本(我一直在使用)不支持这里涉及的应用程序所需的数百个连接。实际上,我认为如果两个“as”都被删除,这个版本应该可以工作。您不能为正在更新的表添加别名,也不需要“as”来为“from”语句中的表名添加别名。这最终是有效的。我不得不将“table1.something”移到select之外,在station的更新部分执行连接。在我的问题中,我将发布正在运行的伪sql。实际上,现在我看到了它,不需要重新发布伪sql。看起来像是你打的。