Eu tenho esse SQL usando um construtor de valor de tabela:
select * from (values ('a', 'b'), ('c', 'd')) v (e, f)
Isso funciona para selecionar dados da tabela com alias v
.
No entanto, quero criar uma with
instrução (CTE) que vincule essa tabela de valores ao alias v
para usá-la na select
instrução após a CTE.
Algo como isto:
with v as
(
values ('a','b'), ('c','d') t (e, f)
)
select e from v where f = 'd'
Como isso é possível?
Basta colar naturalmente sua primeira consulta dentro dos parênteses, como em:
Você precisará colocar a declaração completa no CTE:
Pode ser útil pensar em um CTE não recursivo como açúcar sintático para uma subconsulta. Então, essa é a mesma lógica da sintaxe da subconsulta:
O construtor de valor de tabela dentro de um CTE é um pouco complicado porque a sintaxe SQL não o suporta diretamente da maneira que você está tentando.
A melhor maneira de fazer isso é definir explicitamente os nomes das colunas dentro da própria cláusula VALUES dentro da instrução WITH.
Esta é a maneira correta de escrever sua consulta: https://runsql.com/r/7f9d71d458eb7adf
Observe que o alias t (e, f) deve ser adicionado explicitamente após a cláusula VALUES dentro da subconsulta SELECT * FROM.