首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用PostgreSQL中的子查询列

问引用PostgreSQL中的子查询列
EN

Stack Overflow用户
提问于 2014-02-12 18:14:45
回答 1查看 1.2K关注 0票数 0

我非常熟悉MySQL语法,但在PostgreSQL环境中似乎遇到了一些麻烦。在MySQL中,可以很容易地在联接子查询中引用列,但PostgreSQL中会抛出错误。

例如:

代码语言:javascript
复制
SELECT
  a.userID,
  b.firstname,
  c.minCounter
FROM users a
JOIN users_info b ON (a.userID = b.userID)
LEFT JOIN (
   SELECT
      user_id,
      COUNT(*) AS 'minCounter'
   FROM sales
   WHERE
      total_amount > 500
   GROUP BY user_id
) as c ON (b.userID = c.user_id)

引用子查询"c“及其临时列"minCounter”没有问题。然而,在PostgreSQL中,类似的查询将返回错误:

代码语言:javascript
复制
ERROR:  syntax error at or near "'minCounter'"
LINE 10:   COUNT(*) AS 'minCounter'

对文字列和命名列的计算

如果我将第10行切换为: COUNT(*)为"minCounter“

我的错误只是调整为:

代码语言:javascript
复制
ERROR:  column c.mincounter does not exist
LINE 4: c.minCounter

对于我遗漏了哪些语法或一般的命名差异,有什么建议吗?

(注意,我不确定我们正在运行的PostgreSQL版本是什么版本,因为它被我们的外部开发团队混淆了)。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-12 18:22:48

这与引用列无关,而是与提供列的别名有关。

'minCounter'不是列别名,而是字符文字。如果要引用标识符,则必须使用双引号:"minCounter"

详细信息,请参阅手册:http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

这按照SQL标准的指定和要求工作( MySQL选择忽略该标准,并不真正区分使用单引号的字符文本和使用双引号的对象标识符)。

一旦使用双引号引用标识符,它就会区分大小写.因此,在您的外部查询中,您还需要"minCounter",因为minCounter是一个不同的名称(这也是根据MySQL的标准(您猜到了这个标准也被MySQL忽略)。

总结一下:

  • 无引号:不区分大小写的标识符(或关键字,或运算符,.)
  • 双引号:大小写敏感的标识符
  • 单引号:常量字符值(又名“字符文字”)

一般来说,我强烈建议永远不要引用任何标识符

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21736208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档