我必须在几个表中插入数据,这些表本身来自csv (拷贝)。
在函数中使用LOOP输入数据之前。为了维护性和速度,我想简化这件事。
我需要将数据插入到一个description表中,它既是标题,也是描述(以及多种语言)。
以前,我的代码如下(从循环中提取):
insert into description (label, lang_id, poi_id,date_dernier_update, date_enregistrementbdd, date_derniere_lecture) values (label, lang_id, poi_id, now(), now(), now()) RETURNING id INTO _retour_id_titre;
insert into poi_titre_poi (poi_id, titre_poi_id, titre_poi_key) values (poi_id, _retour_id_titre, label_lang);但现在我不能:
with rows as (
insert into description (label, lang_id, poi_id)
select rdfslabelfrs, '1',  (select id from poi where uri_id = csv_poi_rdf_fr.poi) as toto from csv_poi_rdf_fr  RETURNING id 
    )
    insert into poi_titre_poi (poi_id, titre_poi_id, titre_poi_key) 
     select description.poi_id,  id , 'fr'
    FROM description;实际上,我不能在“poi_id”表中插入“poi_titre_poi”,该表对应于“描述”表中插入的表。
我收到以下错误消息:
错误:由用作表达式tat SQL : 21000的子查询返回的多行
我能让这个工作吗,还是我需要循环?
发布于 2021-08-13 20:18:49
如果用假设填充缺失的比特,它可能会这样工作:
WITH description_insert AS (
   INSERT INTO description
         (label         , lang_id, poi_id)
   SELECT c.rdfslabelfrs, 1      , p.id
   FROM   csv_poi_rdf_fr c
   JOIN   poi p ON p.uri_id = c.poi
   RETURNING poi_id, id
   )
INSERT INTO poi_titre_poi (poi_id, titre_poi_id, titre_poi_key)
SELECT d.poi_id,  d.id , 'fr'
FROM   description_insert d;相关信息:
https://stackoverflow.com/questions/68775990
复制相似问题