58

私はOracle Sqlクエリに精通していないため、別の(結合)テーブルのフィールドを含む制約を満たす必要があるテーブルからいくつかの行を削除する際に問題に直面しています。つまり、JOINを含む行を削除するクエリを書きたいのです。

私の場合、フィールドで結合されたテーブルProductFiltersと別のテーブルがあります。200 以上の行を削除したいのですが、それらが参照する製品の名前は「マーク」です (名前は製品のフィールドです) 。ProductsProductFilters.productID = Products.IDProductFiltersID

Oracle の削除クエリで JOIN が使用できるかどうかを最初に知りたいです。そうでない場合、このクエリを機能させるためにどのように変更する必要がありますか? そのフォームでエラーが表示されるためです。

DELETE From PRODUCTFILTERS pf 
where pf.id>=200 
And pf.rowid in 
(
     Select rowid from PRODUCTFILTERS 
     inner join PRODUCTS on PRODUCTFILTERS.PRODUCTID = PRODUCTS.ID 
     And PRODUCTS.NAME= 'Mark'
);       
4

5 に答える 5

101

最近、次の構文を知りました。

DELETE (SELECT *
        FROM productfilters pf
        INNER JOIN product pr
            ON pf.productid = pr.id
        WHERE pf.id >= 200
            AND pr.NAME = 'MARK')

他の提案されたコードよりもきれいに見えると思います。

于 2015-10-21T14:55:54.587 に答える
52

上記のコメントでリンクした回答に基づいて、これは機能するはずです:

delete from
(
select pf.* From PRODUCTFILTERS pf 
where pf.id>=200 
And pf.rowid in 
  (
     Select rowid from PRODUCTFILTERS 
     inner join PRODUCTS on PRODUCTFILTERS.PRODUCTID = PRODUCTS.ID 
     And PRODUCTS.NAME= 'Mark'
  )
); 

また

delete from PRODUCTFILTERS where rowid in
(
select pf.rowid From PRODUCTFILTERS pf 
where pf.id>=200 
And pf.rowid in 
  (
     Select PRODUCTFILTERS.rowid from PRODUCTFILTERS 
     inner join PRODUCTS on PRODUCTFILTERS.PRODUCTID = PRODUCTS.ID 
     And PRODUCTS.NAME= 'Mark'
  )
); 
于 2012-10-01T11:12:34.553 に答える