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