2016-10-20 2 views
1

У меня есть много разных отношений, и я пытаюсь вставить новые отношения. В тот момент, когда я делаю вставку, я не знаю идентификатора, поэтому мне нужно будет найти его. Моя структура таблицы выглядит следующим образом:MySQL Вставить результаты из списка

**person** 
id 
name 

**film** 
id 
title 

**person_film** 
personId 
filmId 

Учитывая идентификатор человека и список названий фильмов (но не их идентификаторами) я только в состоянии вставить эти отношения в таблицу person_film в два этапа.

SELECT id FROM film WHERE title="film1" OR title="film2"; 

Затем результаты, которые могут быть использованы в качестве вставки:

INSERT INTO person_film (personId, filmId) VALUES (5, 5),(5, 7); 

Есть ли способ сделать это в одном операторе SQL?

ответ

2

Вы можете сделать это с помощью подзапроса:

INSERT INTO person_film (personId, filmId) 
    SELECT 5, id FROM film 
    WHERE title IN("film1","film2"); 

Здесь 5 это значение personId и filmId будет извлечен из film таблицы.

0

Используйте числовые литералы с псевдонимами внутри оператора SELECT. Нет() необходимы вокруг компонента SELECT.

INSERT INTO person_film (personId, filmId) 
    SELECT 
    /* Literal number values with column aliases */ 
    1 AS fpersonId, 
    2 AS filmId, 

    FROM film 
    WHERE title="film1" OR title="film2"; 

Обратите внимание, что в контексте INSERT INTO ... SELECT, псевдонимы не являются на самом деле нужно, и вы можете просто выбрать 1, 2, но в нормальном ВЫБРАТЬ вам понадобятся псевдонимы для доступа столбцов, возвращаемых ,

Смежные вопросы