本文共 847 字,大约阅读时间需要 2 分钟。
或者说,在PostgreSQL中,就算使用update+join不会报错,但join的那部分其实是没任何效果的,如下所示:
update aset value = 'test'from ajoin b on a.b_id = b.idjoin c on b.c_id = c.idwherea.key = 'test'and c.value = 'test';按照上边的sql,本意是a、b、c三表关联,当c的value是’test’且a的key也是’test’的时候,就将a的value也改为’test’。但实际上这个sql有大问题,这里的join和where条件并没有意义,一旦update成功,你会发现,a表内的所有数据的value都被改成了’test’!!要么update 0条数据,要么全部update!至于是哪种结果,这要看where的条件,目前还不清楚为什么会这样。因为这种写法本身就是不对的!
PostgreSQL中正确的多表关联update写法
在update语句中不应该通过join来进行多表关联,而是要通过from来多表关联,如下:
update aset value = 'test'from b,cwherea.b_id = b.idand b.c_id = c.idand a.key = 'test'and c.value = 'test';通过from来多表关联,而关联条件则是放到了where中,这样就可以达到我们想要的效果了。另外补充一句,对于set xxx = 'xxx'这个update的部分,是不可以在column字段前加上表前缀的,比如下边的写法就是有语法错误的:
update a
set a.value = 'test'; 参考链接·
转载地址:http://florb.baihongyu.com/