【问题标题】:Postgres using named column in where clausePostgres在where子句中使用命名列
【发布时间】:2017-11-30 12:45:56
【问题描述】:

在 Postgres 中,我正在为这种语法苦苦挣扎。它在 mysql 中有效,但不确定我做错了什么。

假设我有一个 json 文档。我想在该文档中选择一列并将结果返回为“文本”

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

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

按预期返回。

现在假设我想从列中选择一个名称,这样我的查询将如下所示。

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

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

'

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

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    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)
    

    【讨论】:

    • where 子句前的“s”是什么?这样做不是更容易吗? SELECT member_id, data->>'username' AS username FROM player.player WHERE data->>'username' = 'sam'
    • s 是子选择别名。您的变体与我的实际上是 +/- 相同的。看你喜欢什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2018-03-07
    • 1970-01-01
    • 2018-03-06
    • 2014-04-04
    • 2011-03-15
    • 2020-05-14
    相关资源
    最近更新 更多