Я пытаюсь нормализовать таблицу в MySQL, преобразовывая таблицу со многими подобными столбцами в отношения «многие ко многим» с двумя столбцами. У меня есть следующие таблицы:Заполнение многоцветной таблицы персонажей с использованием трех таблиц в MySQL
лицо:
+----+------+
| id | name |
+----+------+
| 1 | John |
| 2 | Anna |
| 3 | Leon |
+----+------+
person_temp:
+------+--------+--------+--------+--------+
| name | color1 | color2 | color3 | color4 |
+------+--------+--------+--------+--------+
| John | red | blue | green | |
| Anna | green | yellow | | |
| Leon | blue | red | | |
+------+--------+--------+--------+--------+
цвет:
+----+--------+
| id | name |
+----+--------+
| 1 | red |
| 2 | blue |
| 3 | green |
| 4 | yellow |
+----+--------+
Я хотел бы удалить person_temp после заполнения многие-ко-многим отношение таблица примерно такой:
человек цвет:
+-----------+----------+
| person_id | color_id |
+-----------+----------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 3 |
| 2 | 4 |
| 3 | 2 |
| 3 | 1 |
+-----------+----------+
Однако я не нашел решения на мой запрос. Единственное отношение, которое у меня есть к идентификатору человека, - это имя в person_temp. Я знаю, что имена уникальны лично, поэтому было бы нецелесообразно использовать их для запроса.
Я попытался с этим SQL, но он не работает, потому что person_temp не имеет столбца id.
INSERT INTO `person_color`
SELECT p.id, c.id
FROM (
SELECT id, color1 color
FROM person_temp
UNION
SELECT id, color2 FROM person_temp
UNION
SELECT id, color3 FROM person_temp
UNION
SELECT id, color4 FROM person_temp
UNION
SELECT id, color5 FROM person_temp
) p
JOIN color c
ON c.name = p.color;
Если у вас нет 'id' в' person_temp', вам нужно присоединиться к таблице 'person' с' именем' на обеих таблицах. – Viki888
Вы не нормализуетесь, либо в смысле придумывания реляционного дизайна, либо в смысле более высоких нормальных форм. Вы просто улучшаете дизайн. PS Ваш код был очень близок, см. Мой ответ. – philipxy