如何用as返回一个字段



在我的图像表中,我需要从csv_images表中插入数据。

我必须插入图片中的链接。

在poi_image表中,我必须插入图像表的id(即d.id),但我还必须插入另一个表(poi id表)的id。

csv_images表包含一个字段(uri_id),该字段对应于poi表的uri_id字段。

因此,我必须在poi_images表中插入与poi对应的poi的id。 ur_id和csv_address . ur_id所以我使用With as,但我不能传输csv_address。将Uri_id删除到下一步,以便能够重用它:

WITH image_insert AS (
INSERT INTO image
(lien_image)
SELECT c.lien
FROM   csv_images c
join poi p on p.uri_id = c.poi
group by lien

RETURNING  *,  p.uri_id
)
INSERT INTO poi_images (poi_id, image_id)
SELECT p.uri_id,  d.id 
FROM   image_insert d;

谢谢

这很棘手,因为Postgres只允许您返回插入行的值。在您的示例中,lien_image是唯一的(因为GROUP BY),因此一种选择是使用JOIN重建值:

WITH image_insert AS (
INSERT INTO image (lien_image)
SELECT c.lien
FROM csv_images c JOIN
poi p 
ON p.uri_id = c.poi
GROUP BY c.lien
RETURNING *
)
INSERT INTO poi_images (poi_id, image_id)
SELECT c.poi,  ii.id 
FROM image_insert ii JOIN
csv_images c
ON c.lien = ii.lien_image ;

最新更新