在sql查询循环中执行更新

在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

我正在尝试根据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类型和数据相同 两个表中的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反模式。