Je ne connais pas très bien Oracle Sql Queries. Je suis donc confronté à un problème de suppression de lignes d'une table qui doit répondre à une contrainte qui inclut les champs d'une autre table (jointe). En d'autres termes, je veux écrire une requête pour supprimer des lignes, y compris JOIN.
Dans mon cas, j'ai une table ProductFilters
et une autre table Products
jointes sur des champs ProductFilters.productID = Products.ID
. Je veux supprimer les lignes de ProductFilters
ayant un ID
supérieur ou égal à 200 et le produit auquel elles se réfèrent s'appelle 'Mark' (le nom est un champ dans Product).
J'aimerais d'abord savoir si JOIN est acceptable dans une requête de suppression dans Oracle. Sinon, comment dois-je modifier cette requête afin de la faire fonctionner, car 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'
);
D'après la réponse que j'ai liée dans mon commentaire ci-dessus, cela devrait fonctionner:
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 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 que cela a l'air beaucoup plus propre que les autres codes proposés.