Member 10696161 Ответов: 1

Как вставить в таблицу значения из других таблиц - mysql inner join


В этом случае я создал 2 таблицы:

Проекты:

CREATE TABLE projects (
ID int(5) NOT NULL,
PROJECT_NAME varchar(50) NOT NULL
);


Модули:

CREATE TABLE modules (
ID_MODULE int(11) NOT NULL,
NAME varchar(50),
ID_PROJECT int(11) DEFAULT NULL
);


Я вставил данные в таблицу проектов:

INSERT INTO projects (ID, PROJECT_NAME) VALUES
(1, 'BOX'),
(2, 'Duck')


Теперь я хотел бы вставить данные в таблицу "модули", но не с помощью ID_PROJECT. Я хочу вставить с именем проекта из таблицы "проекты". Когда я попробовал с командой( в "Что вы пробовали?"), она показала ошибку:

Цитата:
1054 - неизвестная колонка ' проекты.PROJECT_NAME' в списке полей


Но когда я так написал (второй код в "Что вы пробовали?") Он не показывал никаких ошибок, но и не вставлял никаких записей строк в таблицу "модули".

У меня есть вопрос, Можно ли вставить в таблицу "модули" значения с внутренним соединением другой таблицы (inner join "projects" table)? Если да, то скажите, что мне делать. Спасибо за любую помощь.

Например:

В таблицу "модули" я ничего не вставил. Но хочу вставить данные:

ID_MODULE = 1
NAME = "S-BOX"
projects.PROJECT_NAME = "BOX" (which is inner joined on modules.ID_PROJECT = projects.ID)


Что я уже пробовал:

Я попробовал сначала с этой командой:

INSERT INTO modules (ID_MODULE, NAME, projects.PROJECT_NAME)
SELECT 1, 'S-BOX', projects.PROJECT_NAME
FROM modules INNER JOIN projects
ON modules.ID_PROJECT = projects.ID AND projects.PROJECT_NAME = 'BOX';


Но это показать сообщение об ошибке. Но когда я написал в приведенной ниже команде:

INSERT INTO modules (ID_MODULE, NAME, ID_PROJECT)
SELECT 1, 'S-BOX', projects.PROJECT_NAME
FROM modules INNER JOIN projects
ON modules.ID_PROJECT = projects.ID AND projects.PROJECT_NAME = 'BOX';


Он не показывал никаких ошибок, но и не вставлял никаких записей строк в таблицу "модули".

1 Ответов

Рейтинг:
10

Richard Deeming

Вы не можете вставить данные в несуществующий столбец.

То modules таблица не имеет столбца с именем PROJECT_NAME, поэтому вы не можете ничего вставить в этот столбец.

То ID_PROJECT колонка ожидает номер. Название проекта - это не число. Вы не можете вставить имя проекта в это поле.

Обе команды пытаются присоединиться к modules стол. Но эта таблица не содержит никаких строк, поэтому не будет никаких строк для вставки. Вам нужно обновить свое понимание того, как работают соединения SQL:
Визуальное представление SQL-соединений[^]

Ваша команда должна выглядеть примерно так:

INSERT INTO modules (ID_MODULE, NAME, ID_PROJECT)
SELECT 1, 'S-BOX', projects.ID
FROM projects
WHERE projects.PROJECT_NAME = 'BOX';


Member 10696161

Хорошо, теперь я знаю, что мне делать в следующий раз. Спасибо за помощь! Если только я не знаю, почему мой вопрос отклонен?