sql - register - delete table oracle ejemplo
Eliminar con "Unirse" en Oracle SQL Query (2)
No estoy muy familiarizado con Oracle Sql Queries, por lo tanto, tengo un problema al eliminar algunas filas de una tabla que debe cumplir una restricción que incluye campos de otra tabla (unión). En otras palabras, quiero escribir una consulta para eliminar filas que incluyen UNIR.
En mi caso, tengo una tabla ProductFilters
y otra tabla Products
unidos en los campos ProductFilters.productID = Products.ID
. Quiero eliminar las filas de ProductFilters
tengan una ID
superior o igual a 200 y el producto al que se refieren tiene el nombre ''Marcar'' (el nombre es un campo en Producto).
Me gustaría que me informen inicialmente si la combinación es aceptable en una consulta de eliminación en Oracle. Si no, ¿cómo debo modificar esta consulta para que funcione, ya que en ese formulario recibo un error:
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''
);
Recientemente me enteré de la siguiente sintaxis:
DELETE (SELECT *
FROM productfilters pf
INNER JOIN product pr
ON pf.productid = pr.id
WHERE pf.id >= 200
AND pr.NAME = ''MARK'')
Creo que parece mucho más limpio que otros códigos propuestos.
Según la respuesta a la que he vinculado en mi comentario anterior, esto debería funcionar:
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''
)
);
o
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''
)
);