update中的alias

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






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值