42601 语法错误
您可能会遇到如下所示的错误消息。
ERROR: subquery in FROM must have an alias at character 15
HINT: For example, FROM (SELECT ...) [AS] foo.
STATEMENT: SELECT * FROM (SELECT 1)
此日志事件与语法错误密切相关,但这是许多人遇到的一个明显问题,您可能并不清楚需要以这种方式编写查询。
例如,以下查询将产生此错误:
SELECT * FROM
(SELECT uid, COUNT(*) AS count
FROM my_table
GROUP BY 1
ORDER BY 2)
LIMIT 1;
正确的解决方法是为 FROM 子句中的子查询指定别名(即名称),以便可以在查询中唯一标识它。即使您不打算在任何地方引用该名称,也必须这样做,如下所示:
SELECT * FROM
(SELECT uid, COUNT(*) AS count
FROM my_table
GROUP BY 1
ORDER BY 2) AS x
LIMIT 1;
此错误通常发生在开发或测试环境中,因为像这样编写的查询在运行时总是会出错,与传入的查询计划或值无关。
解决方案:
将所选别名添加到应用程序生成的 SQL 中的子查询中。