如何在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;
注:如果您
提供文本数据而不是屏幕截图
使用的逻辑列名
以文本形式发布数据示例