2016-12-11 17 views
0

私はいくつかの静的なデータを持っています。私はすべてのユニオンの助けを借りてSELECTステートメントを作成しています。これらのデータをDBテーブル(部門)と比較しています..マイナスの助けを借りて、 DBテーブルにあり、それらのレコードを削除する必要があります......静的なデータで既存のレコードを同期する必要があります。これが要件をクリアすることを望みます..Oracleの動的削除

以下のクエリでselectクエリのresultSetを削除しようとしています私のミスがどこにあるのか分かりません。SQLエラーが発生しました:ORA-01732:このビューではデータ操作操作が有効ではありません 01732. 00000 - "この操作ではデータ操作操作が有効ではありません"

ここで私はデテーブルではなく、SELECT文の結果に66,77

delete from (select department_id, department_name, manager_id,location_id from departments 
    minus 
     (select 66,'Administration',200,1700 from dual 
    union all 
    select 77,'Marketing',201,1800 from dual)); 
+0

「department_idには(66,77)ではない」という部分は削除されていませんか? –

+0

@vkp私はすべてのマイナスとユニオンで複数の操作で行う必要がある応答のための@vkp – vinod

+0

私はすべての列の値と比較する必要があります.. – vinod

答えて

1
delete departments 

    where department_id in 
     (
      select department_id 

      from ( select department_id, department_name, manager_id,location_id 
         from departments 

         minus 

         (   select 66,'Administration',200,1700 from dual 
         union all select 77,'Marketing'  ,201,1800 from dual 
         ) 
        ) 
     ) 

または

delete departments 

    where (department_id, department_name, manager_id,location_id) not in 
     (   select 66,'Administration',200,1700 from dual 
     union all select 77,'Marketing'  ,201,1800 from dual 
     ) 

しかし、あなたはすべてのレコードあなたのUNIONの中select null,null,null,null from dualを持っていないことを確認してください:ここで、あなただけのIDが66と77で、これら以外のすべてのレコードを削除したいですまたは何も削除されません

+0

ビンゴ...ありがとうございました...ありがとうございましたDudu – vinod

+0

これは、 –

+0

クリーンな答えを追加しました..しかし、私の場合はnullには当てはまりません.. :) – vinod

1

deleteの作品と一致していない部門からのすべてのレコードLETE。

DELETE FROM departments WHERE id NOT IN (66, 77) 
+0

あなたはどこから(選択*タブから)働いていないと言うことを意味します...私が間違っている場合は、私を修正してください – vinod

+0

@vinodうん。いくつかのエッジケースのクエリでは動作するかもしれませんが、一般的な経験則としてはそうではありません。 – Mureinik

+0

私はこのリンクを参照していたhttp://stackoverflow.com/questions/17548751/how-to-write-a-sql-delete-statement-with-a-select-statement-in-the-where-clauseレスポンス – vinod

関連する問題