私はOracle Sqlクエリに精通していないため、別の(結合)テーブルのフィールドを含む制約を満たす必要があるテーブルからいくつかの行を削除する際に問題に直面しています。つまり、JOINを含む行を削除するクエリを作成します。
私の場合、テーブルProductFilters
と別のテーブルProducts
がフィールドProductFilters.productID = Products.ID
で結合されています。 200以上のProductFilters
を持つID
から行を削除し、それらが参照する製品の名前が 'Mark'である(名前はProductのフィールドです)。
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'
);
上記のコメントでリンクした回答に基づいて、これは機能するはずです:
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'
)
);
最近、次の構文について学びました。
DELETE (SELECT *
FROM productfilters pf
INNER JOIN product pr
ON pf.productid = pr.id
WHERE pf.id >= 200
AND pr.NAME = 'MARK')
他の提案されたコードよりもずっときれいに見えると思います。