首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >插入到两个表中,使用单个SQL语句而不是循环。

插入到两个表中,使用单个SQL语句而不是循环。
EN

Stack Overflow用户
提问于 2021-08-13 17:02:44
回答 1查看 138关注 0票数 0

我必须在几个表中插入数据,这些表本身来自csv (拷贝)。

在函数中使用LOOP输入数据之前。为了维护性和速度,我想简化这件事。

我需要将数据插入到一个description表中,它既是标题,也是描述(以及多种语言)。

以前,我的代码如下(从循环中提取):

代码语言:javascript
运行
复制
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);

但现在我不能:

代码语言:javascript
运行
复制
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的子查询返回的多行

我能让这个工作吗,还是我需要循环?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-13 20:18:49

如果用假设填充缺失的比特,它可能会这样工作:

代码语言:javascript
运行
复制
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;

相关信息:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68775990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档