Como preservar a lógica ORDER BY com vários CTEs

04/07/2024

0

Tenho uma Query, no Trino Enginee, que estou criando varias CTEs, mas estou perdendo a lógica do ORDER BY ao adicionar os CTEs
É tipo isso:

WITH AS CTE1(...)

CTE2 AS (.....ORDEM POR 2)

CTE3 AS(...)

CTE4 AS(...)

SELECT * FROM CTE4 ORDER BY 2


Quero saber como fazer com que o resultado final tenha a mesma ordem do primeiro ORDER BY? Desse jeito que estou fazendo ele retorna diferente
Eu ja tentei botar o mesmo ORDER BY em todas as CTES e continua o mesmo conflito
Estou usando a enginee bd Trino, não tenho muito conhecimento sobre isso, preciso de ajuda
Thiago Melo

Thiago Melo

Responder

Posts

05/07/2024

Arthur Heinrich

O order by deve ser utilizado apenas na query final, que retorna os dados. Se você utiliza dentro de uma CTE, o banco interpreta o conteúdo da CTE como uma tabela sem índice e os joins geralmente utilizam HASH JOIN ou MERGE SORT, que modifica a ordem.

Uma coisa que você pode tentar é sempre retornar as colunas do order by original a cada CTE dependente da primeira, para que ao chegar na query final, você possa utilizar o order by por elas, mesmo que as colunas não sejam retornadas.

Porém, isto nem sempre é possível. Se no meio do caminho ocorrem agregações, parte da informação é perdida, podendo inviabilizar a "gambiarra".
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar