在SQL SELECT
查询中,the logical order of operations is not the lexical order。
在语法上,顺序是:
- 选择
- 从
- 在哪里
- 组别
- 拥有
- ORDER BY
但是逻辑顺序(忽略某些边缘情况以及诸如窗口函数和RDBMS特定的列别名之类的东西)是
- 从
- 在哪里
- 组别
- 拥有
- 选择
- 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