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

私の理解が正しければ、クエリによって生成されたペアを更新目的で使用しています。最初の値を 2 番目の値に変換します。

正確な構文は、使用している 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 ステートメントを update ステートメントに変換する方法も示します。

于 2012-06-26T14:27:40.693 に答える