正在尝试筛选别名列中的空值-postgresql?
使用以下postgresql命令:正在尝试筛选别名列中的空值-postgresql?,sql,postgresql,Sql,Postgresql,使用以下postgresql命令: select id, page -> 'link' as link, login_time from my_table limit 200 我想添加一个where子句来过滤掉链接值不为null的地方——因此它包含一个值 当我运行以下命令时,会收到一条错误消息: select id, page -> 'link' as link, login_time from my_table where link is not null limit
select
id, page -> 'link' as link, login_time
from
my_table
limit 200
我想添加一个where子句来过滤掉链接值不为null的地方——因此它包含一个值
当我运行以下命令时,会收到一条错误消息:
select
id, page -> 'link' as link, login_time
from
my_table
where link is not null
limit 200
找不到列链接
关于如何解决此问题,您有什么想法吗?在SQL
查询中选择
从语法上讲,顺序是:
挑选
从
在哪里
分组
拥有
订购人
但逻辑顺序(忽略某些边缘情况以及诸如窗口函数和RDBMS特定列别名之类的内容)是:
从
在哪里
分组
拥有
挑选
订购人
由于SELECT
发生在WHERE
(和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,
page -> 'link' AS link,
login_time
FROM
my_table
WHERE
( page -> 'link' ) IS NOT NULL
LIMIT
200
(个人咆哮:SQL的干巴巴的语法已经让我个人恼怒了至少十年了——我不明白自1975年SQL标准化至今已经44年了,但没有一家主要的SQL供应商采取行动将语法现代化,使其不那么愚蠢。MySQL确实引入了一些奇怪的东西,如specialGROUP BY
行为和别名,但自第8版以来,他们决定变得更加一致,而不是为了程序员的人体工程学而推动更改-因此,在供应商认真考虑SQL现代化之前,我们将陷入一个短视和武断的美学决策中,甚至在计算机的显示器能够显示更多的SQL之前一次40行)