Supprimer avec "Join" dans la requête sql Oracle

Je ne suis pas très familiarisé avec les requêtes Sql D'Oracle, donc j'ai un problème pour supprimer quelques lignes d'une table qui doit remplir une contrainte qui inclut les champs d'une autre table (joining). En d'autres termes, je veux écrire une requête pour supprimer des lignes incluant JOIN.

Dans mon cas, j'ai une table ProductFilters et une autre table Products rejoint sur les champs ProductFilters.productID = Products.ID. Je veux supprimer les lignes de ProductFilters une ID supérieur ou égal à 200 et le produit auquel ils se réfèrent a le nom "marque" (le nom est un champ dans le produit).

je voudrais d'abord être informé si JOIN est acceptable dans une requête de suppression dans Oracle. Si ce n'est pas le cas, comment dois-je modifier cette requête pour qu'elle fonctionne, puisque sur ce formulaire je reçois une erreur:

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'
);       
31
demandé sur Brian Tompsett - 汤莱恩 2012-10-01 15:06:37

2 réponses

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'
  )
); 

ou

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'
  )
); 
26
répondu davek 2012-10-01 11:37:07

Récemment, j'ai appris de la syntaxe suivante:

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

je pense qu'il semble beaucoup plus propre que d'autres code proposé.

55
répondu xlogic 2015-10-21 14:58:05