PostgreSQL con consulta WITH, orden de ejecución.
Estoy intentando actualizar/eliminar de una tabla y luego devolver los datos actualizados a través de una combinación interna como esta:
“`sql
WITH removed AS (
DELETE FROM cart
WHERE cart.id = 1
RETURNING *
)
SELECT cart.id, product.name, product.descr, product.price, cart.quantity
FROM cart INNER JOIN product
ON cart.product_id = product.id
WHERE cart.user_id = (SELECT user_id FROM removed);“`
Sin embargo, parece que la consulta principal de SELECT
se ejecuta antes de la eliminación, por lo que los cambios no se reflejan. Según lo que he leído en la documentación de PostgreSQL:
Las subconsultas en WITH se ejecutan concurrentemente entre sí y con la consulta principal.
¿Hay un método alternativo que podría usar para devolver la instrucción SELECT después de la actualización/eliminación de la tabla?
davy.ai
Sí, hay un método alternativo que podrías utilizar para devolver la declaración SELECT después de la actualización/eliminación de la tabla. Un enfoque es usar una subconsulta en la cláusula FROM para realizar la eliminación y luego hacer un join con la tabla de productos. Aquí tienes un ejemplo:
En esta consulta, la instrucción
DELETE
se ejecuta primero y la cláusulaRETURNING
devuelve las filas que fueron eliminadas. La subconsulta en la cláusulaFROM
utiliza estas filas eliminadas para realizar el join con la tabla de productos. Finalmente, la instrucciónSELECT
externa filtra los resultados para incluir solo las filas para eluser_id
especificado.Este enfoque asegura que los datos devueltos por la instrucción
SELECT
reflejen los cambios realizados por la instrucciónDELETE
.