Je suis presque sûr que vous pouvez perdre les années distinctes. Lorsque vous utilisez UNION au lieu de UNION ALL, les résultats dupliqués sont rejetés.
Tout dépend de la lourdeur de votre requête de vue en ligne. La clé pour une meilleure performance serait de ne s'exécuter qu'une seule fois, mais ce n'est pas possible étant donné les données qu'elle retourne.
Si vous le faites comme ceci:
select depfunctionid , functionid from Query
group by depfunctionid , functionid
Il est très probable que vous aurez répétiez résultats pour depfunctionid ou functionId.
Je peux me tromper, mais il me semble que vous essayez de récupérer un arbre de dépendances. Si c'est le cas, personnellement, j'essaierais d'utiliser une approche matérialisée.
Si le chemin matérialisé est stocké dans un nom de table de référence de l'auto, je récupérer l'arbre en utilisant quelque chose comme
select asrt2.function_id
from a_self_referencig_table asrt1,
a_self_referencig_table asrt2
where asrt1.function_name = 'blah function'
and asrt2.materialized_path like (asrt1.materialized_path || '%')
order by asrt2.materialized_path, asrt2.some_child_node_ordering_column
Ceci récupéré tout l'arbre dans le bon ordre. Ce qui est nul, c'est d'avoir à construire le chemin matérialisé basé sur le function_id et le parent_function_id (ou dans votre cas, functionid et depfunctionid), mais un déclencheur pourrait s'en occuper assez facilement.
Le point concernant les mots-clés DISTINCT est bon. Le reste, je le crains, manque le point. La dernière requête ne sera pas compilée - le function_id de la liste select est ambigu. –
merci de signaler l'erreur. Je ne suis pas en face d'une console de base de données. –