在为 returning 插入数据期间,子查询必须 return 只有一列
subquery must return only one column during insert data for returning
在 INSERT INTO
期间 return 加入列有什么方法吗?
这是我的查询
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 , 1, 1, 1)
RETURNING address, building_type, building_number,
(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);
最后一个子查询不起作用,因为我想要 return 村庄 table 有两列
有什么方法可以传递那 2 列吗??
您可以将 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 , 1, 1, 1)
returning address, rt, rw, building_type, building_number, province_id, city_id, district_id, 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
s:
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 , 1, 1, 1)
returning address, rt, rw, building_type, building_number, province_id, city_id, district_id, village_id)
select i.*, 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
在 INSERT INTO
期间 return 加入列有什么方法吗?
这是我的查询
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 , 1, 1, 1)
RETURNING address, building_type, building_number,
(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);
最后一个子查询不起作用,因为我想要 return 村庄 table 有两列 有什么方法可以传递那 2 列吗??
您可以将 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 , 1, 1, 1)
returning address, rt, rw, building_type, building_number, province_id, city_id, district_id, 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
s:
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 , 1, 1, 1)
returning address, rt, rw, building_type, building_number, province_id, city_id, district_id, village_id)
select i.*, 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