Как правильно вставить данные в таблицу отношений в SQL? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть некоторые данные в общей таблице, которая называется ImportH. Данные были введены из файла CSV. Я также создал две таблицы, Media и Host (каждая имеет свой соответствующий идентификатор. Эти таблицы связаны третьей таблицей, которая называется HostMedia.

Каждая Host может иметь (или нет). ) различные типы Media (facebook, электронная почта, телефон ...).

Я приведу несколько изображений таблиц:

Таблица ImportH

enter image description here

Хост таблицы

enter image description here

Table Media

enter image description here

Как вставить данные из других таблиц в таблицу 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;

Но это делает декартово произведение для всех хостов, назначая им все строки в таблице Media. Какой правильный путь?

1 Ответ

0 голосов
/ 11 марта 2020

Столбец «media» в таблице «ImportH» выглядит почти как действительный 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;

Примечания: было бы проще, если бы вы

  1. предоставил текстовые данные вместо скриншотов
  2. использовал имена логических столбцов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...