Вставка в одну таблицу из двух разных таблиц со значением автоинкремента - PullRequest
0 голосов
/ 04 декабря 2018

Я вставляю в одну таблицу из двух разных таблиц:

В моей таблице driver мне нужно получить driverID для вставки в мою таблицу car в качестве внешнего ключа driverID_FK.

В то же время мне нужно вставить brand, color и wheel из моей таблицы manufacturer в мою таблицу car.

Мои таблицы:

DRIVER
(driverID, name, age, ...)

CAR
(carID, driverID_FK, brand, color, wheel)

MANUFACTURER
(manufacturerID, brand, color, wheel)

My driverID - значение автоматического увеличения.И в моем веб-приложении могут быть другие записи до или после строки, которую я хочу вставить в таблицу car, поэтому это не всегда последняя вставленная строка в моей таблице driver.То же самое относится и к моим brand, color, wheel значениям в моей manufacturer таблице.

Вот мой подготовленный SQL на данный момент:

String name = //taken from another method...
int manufacturerID = //taken from another method...

String sql = "INSERT INTO car (driverID_FK, brand, color, wheel) 
+ SELECT driverID FROM driver WHERE name = ?,
+ SELECT brand, color, wheel FROM manufacturer WHERE manufacturerID = ? ;";

PreparedStatement psmt = connect.prepareStatement(sql);
psmt.setString(1, name);
psmt.setInt(2, manufacturerID);
psmt.executeUpdate();
psmt.close();

Любой совет с благодарностью

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Запрос 1: получите идентификатор драйвера:

SELECT driverID INTO @driverID
FROM driver
WHERE name = ?

Вставьте информацию о производителе с предыдущим @driverID:

INSERT INTO car (driverID, brand, color, wheel)
SELECT @driverID, brand, color, wheel
FROM manufacturer
WHERE manufacturerID = ?
0 голосов
/ 04 декабря 2018

Использование синтаксиса INSERT .. SELECT:

INSERT INTO car (driverID, brand, color, wheel)
SELECT driverID, brand, color, wheel
FROM driver, manufacturer
WHERE name = ? AND  manufacturerID = ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...