子查询在插入数据期间必须仅返回一列以返回

问题描述

INSERT INTO期间返回联接列的任何方式吗? 这是我的查询

insert into contacts(address,building_type,building_number,user_id,province_id,city_id,district_id,village_id)
VALUES ('address one','apartement',12,1,1)
RETURNING address,(select p.name as province from provinces as p where p.id = contacts.province_id),(select c.name  as city from cities as c where c.id = contacts.city_id),(select d.name as district from districts as d where d.id = contacts.district_id),(select v.name as village,v.postal from villages as v where v.id = contacts.village_id);

最后一个查询不起作用,因为我想返回具有两列的村庄表 那是传递那两列的任何方法吗?

解决方法

您可以将CTE与returning一起使用。 。 。然后是一个查询:

with i as (
      insert into contacts(address,building_type,building_number,user_id,province_id,city_id,district_id,village_id)
      values ('address one','apartement',12,1,1)
      returning address,rt,rw,village_id)
select i.*,(select p.name as province from provinces as p where p.id = i.province_id),(select c.name  as city from cities as c where c.id = i.city_id),(select d.name as district from districts as d where d.id = i.district_id),(select v.name as village,v.postal from villages as v where v.id = i.village_id)    
from i;

但是,以上内容为村庄返回了多行。最好的修复方法是使用适当的join

with i as (
      insert into contacts(address,p.name as province,c.name as city,d.name as district,v.name as village,v.postal   
from i left join
     province p
     on p.id = i.province_id left join
     cities c 
     on c.id = i.city_id left join
     districts d 
     on d.id = i.district_id left join
     villages v 
     on v.id = i.village_id