0

我正在尝试根据 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;
4

2 回答 2

3

如果我理解正确,您将查询生成的对用于更新目的。您希望第一个值变成第二个值。

确切的语法取决于您使用的 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
于 2012-06-26T13:27:58.577 回答
1

这就是我在 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 语句转换为更新。

于 2012-06-26T14:27:40.693 回答