Скопируйте отношение к м в MySQL - PullRequest
0 голосов
/ 17 мая 2019

Предположим, у меня есть две таблицы recipient и list. recipient имеет столбцы id, email и customer. list имеет столбцы id, name и customer.

Обе таблицы связаны через recipient_list со столбцами recipient_id и list_id.

И в recipient, и в list у меня есть данные для customer «Демо-клиента» с соответствующими записями в объединительной таблице.

Сейчас я пытаюсь скопировать эти записи , включая отношения с другим клиентом. Я знаю, что могу вставить данные с помощью выбора, используя следующую схему:

INSERT INTO table_name(column_list)
SELECT 
   select_list 
FROM 
   another_table;

С этим я могу скопировать записи recipient и list. Однако это не помогает мне с дублированием n-м отношений. Как мне этого добиться?

Edit: Вот краткий пример того, чего я хотел бы достичь:

До:

recipient
+----+------------------+---------------+
| id |      email       |   customer    |
+----+------------------+---------------+
|  1 | test@example.org | Demo Customer |
+----+------------------+---------------+
list
+----+-----------+---------------+
| id |   name    |   customer    |
+----+-----------+---------------+
|  1 | demo list | Demo Customer |
+----+-----------+---------------+
recipient_list
+--------------+---------+
| recipient_id | list_id |
+--------------+---------+
|            1 |       1 |
+--------------+---------+

После того, как:

recipient
+----+------------------+---------------+
| id |      email       |   customer    |
+----+------------------+---------------+
|  1 | test@example.org | Demo Customer |
|  2 | test@example.org | Real Customer |
+----+------------------+---------------+
list
+----+-----------+---------------+
| id |   name    |   customer    |
+----+-----------+---------------+
|  1 | demo list | Demo Customer |
|  2 | demo list | Real Customer |
+----+-----------+---------------+
recipient_list
+--------------+---------+
| recipient_id | list_id |
+--------------+---------+
|            1 |       1 |
|            2 |       2 |
+--------------+---------+

Обратите внимание, что первичные ключи не обязательно так хороши, как в примере.

1 Ответ

0 голосов
/ 17 мая 2019

Запрос для вставки будет

INSERT INTO table_name(column_list)
SELECT 
   select_list 
FROM 
   another_table
WHERE customer = customer_name;

«Другая_таблица» должна быть соединением таблиц получателя и списка по имени_пользователя. Вступление в группу устранит плохие случаи, возникающие из-за n-m отношений.

...