0

Table1、Table2、および Table3 の 3 つのテーブルと、Table2 の行を削除する次のクエリがあります。

delete from Table2 
where EXISTS
(select (1) from Table1
 where Table1.col1=Table2.col1
 AND   Table1.col2=Table2.col2
 AND   Table1.col3=(select **Table3.col3 from Table3** inner join Table2 on Table3.col1=Table2.col1)

Table1 の col3 が Table3 の col3 と一致し、Table1 の col1,col2 が Table2 の col1,col2 と一致する場合、Table2 から行を削除する必要があります。ただし、このクエリでは Table3 を使用できません。助けてください

4

2 に答える 2

1

このような何かがうまくいくはずです:

delete from 
    Table2 t2
where 
    Exists (
        select
            'x'
        from 
            Table1 t1 
                inner join
            Table3 t3
                on t1.col3 = t3.col3
        where
            t1.col1 = t2.col1 and
            t1.col2 = t2.col2
 );
于 2013-10-07T20:45:58.717 に答える
0

merge intoこのステートメントを使用すると、メリットが得られる場合があります。Table1,2,3 と Col1,2,3 の例の名前ですべての関係を区別することは困難ですが、次のようになります。

merge into Table2 t2
using
  (select
    t2.id
  from
    Table1 t1
    inner join Table2 t2 on t2.col1 = t1.col1 and t2.col2 = t1.col2
    inner join Table3 t3 on t3.col3 = t1.col3 and t3.col1 = t2.col1
  ) t2x
on (t2.id = t2x.id)
when matched then
  delete;

これは基本的に同じです

delete from Table2 t2 
where
  t2.id in
    (select
      t2.id
    from
      Table1 t1
      inner join Table2 t2 on t2.col1 = t1.col1 and t2.col2 = t1.col2
      inner join Table3 t3 on t3.col3 = t1.col3 and t3.col1 = t2.col1
    )
于 2013-10-07T20:51:41.363 に答える