为何PostgreSQL不支持SELECT * FROM (t)这类SQL语法?MySQL可正常执行
PostgreSQL与MySQL子查询语法差异原因分析
PostgreSQL报错的核心原因是它严格遵循SQL标准,而MySQL做了语法扩展:
- SQL标准规定,当把括号内的内容作为派生表(即FROM子句里的子查询数据源)时,括号内必须是一个完整的SELECT查询语句。你写的
(t as a)或(t)不符合这个要求,因为缺少了SELECT关键字和对应的查询逻辑,所以PostgreSQL会抛出语法错误。 - MySQL对标准SQL做了简化扩展,允许在这种场景下直接省略SELECT语句,仅用表名(带或不带别名)作为括号内的内容,这是MySQL独有的语法兼容处理,并非通用标准。
如果要让这段SQL在PostgreSQL中正常运行,需要改成符合标准的写法:
SELECT * FROM (SELECT * FROM t) as a;
内容的提问来源于stack exchange,提问作者Bo Gao
相关产品推荐
相关产品推荐

