ヘッダーをスキップ
Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド
リリース6.0
B25770-01
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

結合更新

TimesTenでは、結合更新文がサポートされています。結合更新を使用すると、副問合せの結果を使用して、表の列を1つ以上更新できます。

構文
UPDATE [Owner.]TableName
SET ColumnName=Subquery
[WHERE SearchCondition]

または

UPDATE [Owner.]TableName

SET (ColumnName[,...])=Subquery
[WHERE SearchCondition]
パラメータ

UPDATE文には、次のパラメータがあります。

[Owner.]TableName

[Owner.]TableNameは、更新する表を識別します。

SET
ColumnName=
Subquery

更新する列を指定します。単一のUPDATE文で同じ表の複数の列を更新できます。この副問合せはネストできますが、SET句に含めることができる副問合せは1つのみです。

副問合せのSelectListの値の数は、SET句で指定された列数と同じである必要があります。副問合せが更新する行に対して2行以上返す場合は、エラーが返されます。

WHERE SearchCondition
検索条件には副問合せを含めることができます。検索条件がTRUEとなる行はすべて、SET句の指定に従って更新されます。検索条件に一致しない行に影響はありません。検索条件に一致する行がない場合、表は変更されません。

説明

結合更新のSET句内で副問合せを使用しても、更新されるターゲット表の行数は削減されません。この行数を削減するには、WHERE句を指定する必要があります。したがって、WHERE句内でターゲット表の行が指定されているにもかかわらず、副問合せがこの行に対していずれの行も返さない場合、この行の更新対象列はNULL値に更新されます。

例13.108
UPDATE t1 SET x1=(SELECT x2 FROM t2 WHERE id1=id2); 
UPDATE t1 SET (x1,y1)=(SELECT x2,y2 FROM t2 WHERE id1=id2); 
 

t1の行がt2と一致しない場合、最初の文のx1の値および2番目の文のx1とy1の値はNULLに設定されます。

例13.109

t2と一致するt1の行のみを更新するように更新を制限するには、副問合せを含むWHERE句を次のように指定する必要があります。

UPDATE t1 SET x1=(SELECT x2 FROM t2 WHERE id1=id2) WHERE id1 IN (SELECT
id2 FROM t2); 
UPDATE t1 SET (x1,y1)=(SELECT x2,y2 FROM t2 WHERE id1=id2) WHERE
id1 IN (SELECT id2 FROM t2); 
関連項目

SELECT