在sql查询循环中执行更新
我正在尝试根据TableB更新TableA中的ColumnA。下面是我需要循环更新TableA的结果集在sql查询循环中执行更新,sql,loops,sql-update,sybase,Sql,Loops,Sql Update,Sybase,我正在尝试根据TableB更新TableA中的ColumnA。下面是我需要循环更新TableA的结果集 SELECT TableB.ColumnA, TableB.ColumnB FROM TableA, TableB WHERE TableA.ColumnA =NULL AND TableB.ColumnB = TableA.ColumnB AND TableB.ColumnC =true; 两个表中的CoulmnA类型和数据相同 两个表中的Colu
SELECT TableB.ColumnA,
TableB.ColumnB
FROM TableA, TableB
WHERE TableA.ColumnA =NULL
AND TableB.ColumnB = TableA.ColumnB
AND TableB.ColumnC =true;
两个表中的CoulmnA类型和数据相同
两个表中的ColumnB的类型和数据相同
我不能做的是循环遍历结果集,并以类似的方式更新TableA,如下所示:
对于上面结果集中的每一行
UPDATE TableA
SET ColumnA = ResultSet.ColumnA
WHERE TableA.ColumnB = ResultSet.ColumnB;
如果我理解正确,您正在使用查询生成的对进行更新。您希望将第一个值转换为第二个值 确切的语法取决于您使用的SQL版本。以下是SQL Server的一个示例:
with toupdate as (SELECT TableB.ColumnA, TableB.ColumnB
from TableA join TableB
TableB.ColumnB = TableA.ColumnB
where TableA.ColumnA = NULL AND TableB.ColumnC =true
)
update tableA
set TableA.ColumnA = toupdate.ColumnB
from toupdate
where toupdate.ColumnA = tableA.columnA
如果没有“with”语句,您可以尝试:
update tableA
set TableA.ColumnA = toupdate.ColumnB
from (SELECT TableB.ColumnA, TableB.ColumnB
from TableA join TableB
TableB.ColumnB = TableA.ColumnB
where TableA.ColumnA = NULL AND TableB.ColumnC =true
) toupdate
where toupdate.ColumnA = tableA.columnA
如果我理解正确,您正在使用查询生成的对进行更新。您希望将第一个值转换为第二个值 确切的语法取决于您使用的SQL版本。以下是SQL Server的一个示例:
with toupdate as (SELECT TableB.ColumnA, TableB.ColumnB
from TableA join TableB
TableB.ColumnB = TableA.ColumnB
where TableA.ColumnA = NULL AND TableB.ColumnC =true
)
update tableA
set TableA.ColumnA = toupdate.ColumnB
from toupdate
where toupdate.ColumnA = tableA.columnA
如果没有“with”语句,您可以尝试:
update tableA
set TableA.ColumnA = toupdate.ColumnB
from (SELECT TableB.ColumnA, TableB.ColumnB
from TableA join TableB
TableB.ColumnB = TableA.ColumnB
where TableA.ColumnA = NULL AND TableB.ColumnC =true
) toupdate
where toupdate.ColumnA = tableA.columnA
这就是我在SQl Server中编写它的方式,看看sybase语法,它看起来也可以工作
UPDATE A
SET ColumnA = B.ColumnB
--SELECT ColumnA , B.ColumnB
FROM tableA A
JOIN TableB B
ON B.ColumnB = A.ColumnB
WHERE A.ColumnA = NULL AND B.ColumnC =true;
注意,我将注释行放进去,以便您可以看到实际值,以确保在运行更新之前更新是正确的。它还显示了如何将select语句转换为更新 这是我在SQl Server中编写它的方式,从sybase语法来看,它似乎也可以工作
UPDATE A
SET ColumnA = B.ColumnB
--SELECT ColumnA , B.ColumnB
FROM tableA A
JOIN TableB B
ON B.ColumnB = A.ColumnB
WHERE A.ColumnA = NULL AND B.ColumnC =true;
注意,我将注释行放进去,以便您可以看到实际值,以确保在运行更新之前更新是正确的。它还显示了如何将select语句转换为更新 你必须循环吗?你不能只使用你编写的查询作为更新的基础,然后一次完成所有的更新?我不知道怎么做?你能解释一下吗?感谢您的两个查询都具有相同的
,其中
部分:tableA.ColumnB=ResultSet.ColumnB
(在结果集中ColumnB=TableB.ColumnB);因此,您可以简单地使用第一个查询中的where
语句更新查询。这意味着,解决方案必须类似于updatea,B SET A.ColumnA=B.ColumnA,其中A.ColumnA=NULL,B.ColumnB=A.ColumnB和B.ColumnC=true代码>我没有检查,但它应该可以工作;上面的代码出现了大量语法错误。你必须循环吗?你不能只使用你编写的查询作为更新的基础,然后一次完成所有的更新?我不知道怎么做?你能解释一下吗?感谢您的两个查询都具有相同的,其中
部分:tableA.ColumnB=ResultSet.ColumnB
(在结果集中ColumnB=TableB.ColumnB);因此,您可以简单地使用第一个查询中的where
语句更新查询。这意味着,解决方案必须类似于updatea,B SET A.ColumnA=B.ColumnA,其中A.ColumnA=NULL,B.ColumnB=A.ColumnB和B.ColumnC=true代码>我没有检查,但它应该可以工作;上面的代码出现了大量语法错误。很抱歉,我使用的是sybase而不是sql server。谢谢你的回复。我正在寻找与Sybase相似的东西Sybase与SQL server非常相似,逻辑应该基本相同-尝试一下。我尝试了上面的逻辑,并说语法问题,关键字“WITH”附近的语法不正确。Msg:156,Level:15,State:2服务器:SYBASEN20,第1行您可以尝试连接子查询,而不是将其包含在WITH子句中<代码>更新表格集。。。from(…subquery…)as toupdate where…
很抱歉,它在关键字“as”处抛出语法错误,无法理解将其放置在何处。我试着把地点改到几个地方,但还是不起作用抱歉,我使用的是sybase而不是sql server。谢谢你的回复。我正在寻找与Sybase相似的东西Sybase与SQL server非常相似,逻辑应该基本相同-尝试一下。我尝试了上面的逻辑,并说语法问题,关键字“WITH”附近的语法不正确。Msg:156,Level:15,State:2服务器:SYBASEN20,第1行您可以尝试连接子查询,而不是将其包含在WITH子句中<代码>更新表格集。。。from(…subquery…)as toupdate where…
很抱歉,它在关键字“as”处抛出语法错误,无法理解将其放置在何处。我试着把地点改到几个地方,但还是不起作用注意我删除了隐式连接,它们是区域SQL反模式。注意我删除了隐式连接,它们是区域SQL反模式。