Postgres在where子句中使用命名列

时间:2017-11-30 04:37:40

标签: postgresql

在Postgres中,我正在努力学习这种语法。它适用于mysql,但不确定我做错了什么。

所以,让我说我有一个json文档。我想在该文档中选择一列,并将结果返回为" text"

所以我的查询看起来像这样。

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

按预期返回此内容。

result

现在假设我要从列中选择一个名称,以便我的查询看起来像这样。

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

当我运行查询时,我得到了这个。

result 2'

为什么这样做?我返回的json作为文本数据类型返回,因为我在列上使用json->>

1 个答案:

答案 0 :(得分:0)

PostgreSQL基于SQL标准,并且不可能在同一查询级别使用别名。您应该在更高级别使用派生表和过滤器:

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)