加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

update中的alias

发布时间:2020-12-13 17:59:49 所属栏目:百科 来源:网络整理
导读:PostgreSQL中的update语句对alias的支持没有select中支持的完善,有个不大不小的问题。虽然不严重,但不知道的话还是会引起很大的困惑。 首先看一下PostgreSQL对update的帮助: Command:UPDATE Description:updaterowsofatable Syntax: UPDATE[ONLY]table[[A

PostgreSQL中的update语句对alias的支持没有select中支持的完善,有个不大不小的问题。虽然不严重,但不知道的话还是会引起很大的困惑。
首先看一下PostgreSQL对update的帮助:
  1. Command:UPDATE
  2. Description:updaterowsofatable
  3. Syntax:
  4. UPDATE[ONLY]table[[AS]alias]
  5. SET{column={expression|DEFAULT}|
  6. (column[,...])=({expression|DEFAULT}[,...])}[,...]
  7. [FROMfromlist]
  8. [WHEREcondition|WHERECURRENTOFcursor_name]
  9. [RETURNING*|output_expression[ASoutput_name][,...]]
可以看到在 UPDATE后可以通过 alias的方式指明需要更新的table的别名,于是我们很容易写出如下格式的update语句:
  1. updatexuepeng.bbasbsetb.a=3wherea=2;
不幸的是,这样写是不能通过PostgreSQL的解析器的,会得到如下的错误提示:
  1. ERROR:column"b"ofrelation"bb"doesnotexist
  2. LINE1:updatexuepeng.bbasbsetb.a=3wherea=2;
PostgreSQL的解析器把b.a = 3当成了bb的一个列的名称,很奇怪的行为。
因此我们虽然使用了alias,但是在set的语句中还是不能使用这个别名的。有意思的是,在where的子语句中,却是能够正常使用alias。以下的语句是正确的:
  1. updatexuepeng.bbasbseta=3whereb.a=2;
PostgreSQL的版本是8.3,不知道这个bug哪天能够修正好。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读