/ / Postgres usando coluna nomeada na cláusula where - postgresql

Postgres usando coluna nomeada na cláusula where - postgresql

No Postgres eu estou lutando com essa sintaxe. Ele funciona no mysql, mas não tenho certeza do que estou fazendo errado.

Então, digamos que eu tenho um documento json. Eu quero selecionar uma coluna nesse documento e retornar o resultado como "texto"

Então minha consulta ficaria assim.

SELECT member_id, data->>"username" AS username
FROM player.player

Retorna isso como esperado.

resultado

Agora vamos dizer que eu quero selecionar um nome da coluna para que minha consulta seja assim.

SELECT member_id, data->>"username" AS username
FROM player.player WHERE username LIKE "sam"

Quando executo a consulta, recebo isso.

resultado 2"

Por que ele faz isso? O json que eu estou retornando está retornando como tipo de dados de texto desde que eu estou usando json->> em uma coluna.

Respostas:

1 para resposta № 1

O PostgreSQL é baseado no padrão SQL e não é possível usar um alias no mesmo nível de consulta. Você deve usar tabela derivada e filtrar em nível superior:

postgres=# select 1 as x where x = 1;
ERROR:  column "x" does not exist
LINE 1: select 1 as x where x = 1;
^
postgres=# select * from (select 1 as x) s where x = 1;
┌───┐
│ x │
╞═══╡
│ 1 │
└───┘
(1 row)