1

テストデータをクリーンアップするユーティリティの一部として外部キー制約を回避するために、子テーブルからデータを削除するカスタム Oracle クエリを作成しています。

テーブル 1 (PK - (id1,id2)) とテーブル 2 (FK -(id3,id4)) の 2 つのテーブルがあるとします。ここで、id1、id2、id3、id4 はすべて Number 型です。表 2 には、表 1 の主キーに対する複合外部キー制約があります。これが私が今持っているものです(今選択するだけで、後で削除するように変わります):

select (cast(t2.id3 as varchar2(30)) || ',' || cast(t2.id4 as varchar2(10)))  
as new_search from Table2 t2 where new_search in 
(select (cast(t1.id1 as varchar2(30)) || ',' || cast(t1.id2 as varchar2(10))) 
as new_search from Table1 t1 where t1.someColumn=someValue);

ただし、これを実行すると、ORA-00904 NEW_SEARCH:invalid_identifier が返されます。だから、私の質問は次のとおりです。

(1) ここで何が間違っていますか? (2)これを行うより良い方法はありますか?

ありがとう。

4

1 に答える 1

2

1) where 句で列のエイリアスを使用することはできません
2) これを試してください:

select t2.id3, t2.id4 
from Table2 t2 
where (t2.id3, t2.id4) in 
  (select t1.id1, t1.id2 
   from Table1 t1 
   where t1.someColumn=someValue
  );
于 2013-02-21T22:36:14.040 に答える