Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中正确地将数据插入到关系表中?_Sql_Postgresql_Insert - Fatal编程技术网

如何在SQL中正确地将数据插入到关系表中?

如何在SQL中正确地将数据插入到关系表中?,sql,postgresql,insert,Sql,Postgresql,Insert,我在一个名为ImportH的通用表中有一些数据。数据来自csv文件。我还创建了两个表,Media和Host(每个表都有各自的ID。这些表由名为HostMedia的第三个表关联 每个主机可以有(或没有)不同类型的媒体(facebook、电子邮件、电话……) 我将提供一些表的图像: 表格导入 表格主机 表格媒体 如何将其他表中的数据插入表HostMedia?此表如下所示: create table HostMedia ( host_id int references Host (ho

我在一个名为
ImportH
的通用表中有一些数据。数据来自csv文件。我还创建了两个表,
Media
Host
(每个表都有各自的ID。这些表由名为
HostMedia
的第三个表关联

每个
主机
可以有(或没有)不同类型的
媒体
(facebook、电子邮件、电话……)

我将提供一些表的图像:

表格导入

表格主机

表格媒体

如何将其他表中的数据插入表
HostMedia
?此表如下所示:

create table HostMedia (

    host_id int references Host (host_id),
    id_media int references Media (id_verification),
    primary key (host_id, id_media)
);
我试过这个:

insert into HostMedia (host_id, id_media)
select Host.host_id, Media.id_verification
from Host, Media;
但这对所有主机来说都是笛卡尔积,将
媒体
表中的所有行分配给它们。正确的方法是什么?

您的“ImportH”表中的“Media”列看起来几乎像一个有效的JSON,因此这可能会起作用:

INSERT INTO HostMedia (host_id, id_media)
SELECT i.host_id, m.id_verification
FROM (
  SELECT host_id,
  json_array_elements_text(replace(media,'''','"')::json) AS media_name
  FROM ImportH
) AS i
JOIN Media AS m ON m.media = i.media_name;
注:如果您

  • 提供文本数据而不是屏幕截图
  • 使用的逻辑列名

  • 以文本形式发布数据示例