update中的alias

前端之家收集整理的这篇文章主要介绍了update中的alias前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

猜你在找的Postgre SQL相关文章