Suponha que eu tenha uma consulta Q1 e precise executar uma consulta como a seguinte:
Q1
union
select *
from (some query that uses Q1 outcome)
Eu gostaria de fazer aquilo:
- Sem criar nenhuma visualização
- Sem executar duas vezes a consulta Q1.
Como posso fazer isso no PostgreSQL?
Você pode usar expressões de tabela comuns para isso:
ou ainda:
Você também pode ter mais de um CTEs usados em sequência:
Nenhuma exibição criada e nenhuma execução dupla da consulta Q1 - bem, isso depende da implementação. O caminho de execução realmente seguido depende do otimizador e de vários outros fatores. A consulta é mais compacta e elegante, mas não significa que seja mais eficiente do que expandi-la.