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.

¿Puede hacer referencia a la misma consulta recursiva dos veces?

Estoy tratando de eliminar recursivamente una carpeta y tengo este script:

with recursive all_folders (id) as (
    select f.id
    from folder f
    where f.id = 33

union all

select f.id
from folder f
         join all_folders of on of.id = f.parent_folder_id
)

delete
from sample
where sample.parent_folder_id in (select id from all_folders);

with recursive all_folders (id) as (
    select f.id
    from folder f
    where f.id = 33

union all

select f.id
from folder f
         join all_folders of on of.id = f.parent_folder_id
)

delete
from folder
where folder.id in (select id from all_folders);

Me preguntaba si puedo limpiar esta duplicación, refiriéndome a un único resultado de all_folders, en lugar de generarlo dos veces.

También me preguntaba si esta consulta es ineficiente o si se puede mejorar.

¿Alguna idea?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo verificar la eficiencia de una consulta sin ejecutarla en una base de datos real con datos de muestra. Sin embargo, con respecto a la duplicación del CTE all_folders, puede usar una tabla temporal para almacenar el resultado del CTE y hacer referencia a ella dos veces en ambas instrucciones de eliminación. Aquí hay un ejemplo:

    con recursivo all_folders (id) como (
        select f.id
        from folder f
        where f.id = 33
    
        union all
    
        select f.id
        from folder f
                 join all_folders of on of.id = f.parent_folder_id
    )
    select id into temp_table from all_folders;
    
    delete from sample where parent_folder_id in (select id from temp_table);
    delete from folder where id in (select id from temp_table);
    

    Al utilizar una tabla temporal, puede evitar generar el CTE all_folders dos veces, lo que puede mejorar el tiempo de ejecución de su consulta.

Comments are closed.