INSERT может вставлять только в одну таблицу в данном выражении.Вам нужно будет сделать как минимум два оператора.
Сначала вставьте в таблицу mytasks:
INSERT INTO mytasks (task_name) VALUES ('make presentation and get coffee');
Затем выполните оператор INSERT...SELECT
, в котором SELECT соответствует нескольким строкам, чтобы вы моглиполучить соответствующие значения mytag_id.Используйте LAST_INSERT_ID()
, чтобы получить значение только что вставленного mytask_id (я предполагаю, что это столбец с автоинкрементом).
INSERT INTO mytasks_mytags (mytag_id, mytask_id)
SELECT tag_id, LAST_INSERT_ID() FROM mytags
WHERE tag_name IN ('home','work');
Приведенный выше SELECT выбирает tag_id из каждой строки и использует последний сгенерированныйid из предыдущей INSERT в качестве второго столбца в каждой строке.
Поскольку вы, вероятно, хотите, чтобы задача и теги выглядели как одно изменение в базе данных, способ сделать это с помощью сделка .Пока вы используете таблицы InnoDB, вы можете вносить несколько изменений и фиксировать их вместе.Ни один другой запрос к базе данных не может увидеть изменения в частично завершенном состоянии.