试图过滤别名列中的空值-Postgresql?

具有以下postgresql命令:

select 
id,page -> 'link' as link,login_time
from 
my_table 
limit 200

我想添加一个where子句以过滤掉链接值不为null的位置-因此它包含一个值。

当我运行以下命令时,我收到一条错误消息:

select 
id,login_time
from 
my_table 
where link is not null
limit 200

未找到列链接

关于如何解决此问题的任何想法?

liuqinjian 回答:试图过滤别名列中的空值-Postgresql?

在SQL SELECT查询中,the logical order of operations is not the lexical order

在语法上,顺序是:

  1. 选择
  2. 在哪里
  3. 组别
  4. 拥有
  5. ORDER BY

但是逻辑顺序(忽略某些边缘情况以及诸如窗口函数和RDBMS特定的列别名之类的东西)是

  1. 在哪里
  2. 组别
  3. 拥有
  4. 选择
  5. ORDER BY

SELECT(和WHERE之后{strong>之后),HAVING发生时,您需要放置取决于您的投影的谓词。 (您的SELECT子句)进入外部查询。

SELECT
    *
FROM
    (
        SELECT
            id,page -> 'link' AS link,login_time
        FROM
            my_table
    ) AS iq
WHERE
    iq.link IS NOT NULL
LIMIT
    200

或者,您仍然可以在WHERE子句中进行测试,这仅意味着必须重复自己:

SELECT
    id,login_time
FROM
    my_table
WHERE
    ( page -> 'link' ) IS NOT NULL
LIMIT
    200

(个人直言:SQL违反DRY的语法至今已有十多年的历史了-我不知道从1975年对SQL进行标准化以来已经有44年的历史了,但是没有一家主要的SQL供应商MySQL确实采取了一些现代化的措施,以减少 asinine 。MySQL确实引入了一些怪异的东西,例如特殊的GROUP BY行为和别名,但是自版本8起,他们决定变得更加一致,而不是为了程序员的人机工程学而推动变革-因此,直到供应商认真对待SQL的现代化之前,在计算机甚至不能具有能够一次显示40行以上的显示器之前,我们将陷入一种短视和任意审美的决定。 / p>

本文链接:https://www.f2er.com/3167413.html

大家都在问