es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for 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:

    with test_cte (id,nombre) as (
        select id, nombre
        from test
        where nombre = 'john'
    )
    delete from test
    where id in (
        select id
        from test_cte
    )
    

    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ón DELETE, usamos una subconsulta para seleccionar los ids de la consulta CTE filtrada y eliminar cualquier registro en la tabla test 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:

    with test_cte (id,nombre) as (
        select id, nombre
        from test
        where nombre = 'john'
    )
    delete test
    from test
    inner join test_cte
    on test.id = test_cte.id
    

    En este ejemplo, estamos uniendo la tabla test con la consulta CTE test_cte filtrada en la columna de id y eliminando cualquier fila coincidente en la tabla test.

Comments are closed.