postgresSQL 在update语句中使用别名 和 关联表(子查询)

update apt_taxiway m 
set code = n.code, name = n.name
from (
select name as code, name, uuid, version, airport_code from am_taxiway_area where name like '%-%' and version = '2020_14'
union all
select a.name as code, a.name, a.uuid, a.version, a.airport_code 
from am_taxiway_area a right join (
select name as code from am_taxiway_area where name not like '%-%' and version = '2020_14' group by name having count(name) = 1 
) b on a.name = b.code
where a.version = '2020_14'
union all
select a.name as code, a.name || '_' || a.order1 as name, a.uuid, a.version, a.airport_code 
from am_taxiway_area a right join (
select name as code from am_taxiway_area where name not like '%-%' and version = '2020_14' group by name having count(name) > 1 
) b on a.name = b.code
where a.version = '2020_14') n
where m.uuid = n.uuid and m.version = '2020_14';

同mysql和oracle不同,pgsql的update语法中关联表不使用join ,而是使用from,关联条件不用on,而是写在where中,和条件写在一起。

使用别名更新时,被更新表的字段不能用别名,如m.code = n.code是不行的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值