Cómo utilizar los resultados de una consulta CTE dentro de otra consulta.
Quiero tomar el resultado de una consulta CTE y utilizarlo dentro de otra consulta.
Este ejemplo simplificado utiliza una consulta CTE para devolver una lista de IDs.
with test_cte (id,name) as (
select id, name
from test
)
select id
from test_cte
where name = 'john'
Quiero utilizar esta lista de IDs para eliminar algunos registros así, pero estoy obteniendo un error de sintaxis:
delete from test
where id in (
with test_cte (id,name) as (
select id, name
from test
)
select id
from test_cte
where name = 'john'
)
¿Hay alguna manera de hacer esto?
davy.ai
Sí, hay una forma de hacer esto. Puede utilizar la consulta CTE en una subconsulta y luego utilizar esa subconsulta resultante en su declaración
DELETE
. Aquí hay un ejemplo:En este ejemplo, estamos filtrando la consulta
SELECT
inicial en el CTE para que solo devuelva filas donde el nombre es “john”. Luego, en la declaraciónDELETE
, usamos una subconsulta para seleccionar los ids de la consulta CTE filtrada y eliminar cualquier registro en la tablatest
donde el id está en esa lista.Tenga en cuenta que la subconsulta en la declaración
DELETE
también se puede escribir como una unión:En este ejemplo, estamos uniendo la tabla
test
con la consulta CTEtest_cte
filtrada en la columna de id y eliminando cualquier fila coincidente en la tablatest
.