2016-05-24 18 views
0

オペレータテーブルにリンクする30の異なるテーブルの値を検索する必要があります。複数のテーブルを検索するSQL構文

1 .. *関係(オペレータが2つの列を使用して、これらの30個のテーブルのいずれかによって参照することができます)CREATEDBYmodifiedby

は現在、これらのテーブルすなわちへの参照を見つけるために、30 select文を実行しているイム

Select * from table.namespc.contnt 
where iCreatedById = 12345 
or imodifiedby = 12345 

次に、参照が見つかったテーブルを更新します。

UPDATE table.namespc.contnt 
SET iCreatedById = 54321, iModifiedById = 54321 
where iCreatedById = 12345 
or iModifiedById = 12345 

このプロセスを実行する簡単な方法はありますか?配列にテーブルを追加しますか?変数に値を渡し、見つかった場合は検索と更新だけを行います。

+4

データベース設計が似ているようです。それを再モデリングすることを検討してください! – jarlh

+0

iCreatedByIdとimodifiedbyは、おそらく1つのテーブルに1オンスしか格納されません。 –

答えて

0

オペレータへの参照を持つ可能性のある30個のテーブルの名前を含む一時テーブルを作成できます。
次に、カーソルを使用して要素をループし、更新クエリを動的に作成します。このクエリは、execute immediateを使用して実行する必要があります。あなたがそうでない場合には作成者と修飾子の両方を更新するいずれかが、あなたが探しているものですので

UPDATE table.namespc.contnt 
    SET iCreatedById = 54321 
WHERE iCreatedById = 12345; 
UPDATE table.namespc.contnt 
    SET iModifiedById = 54321 
WHERE iModifiedById = 12345; 

この:

はところで、更新クエリは、2つの別々のクエリに分割する必要があります。

関連する問題