MySQL, вставляющий несколько записей с помощью select
Вопрос
У меня есть "таблица словаря" под названием car_status, в которой есть столбец "id" и столбец "status".
car_status
id status
1 broken
2 fixed
3 working
4 fast
5 slow
У меня есть таблица под названием cars со столбцами:идентификатор, тип, status_id
cars
id type status_id
1 jeep 1
2 ford 3
3 acura 4
Я надеюсь вставить несколько записей в cars и присвоить им всем статус, связанный с "работает".Какой самый лучший / простой способ?Я знаю, что могу запросить и найти status_id, который "работает", а затем выполнить запрос insert, но можно ли в любом случае сделать это с помощью одного запроса insert, используя join или select?
Я пробовал такие вещи, как:
INSERT INTO cars (type, status_id)
VALUES
('GM',status_id),
('Toyota',status_id),
('Honda',status_id)
SELECT id as status_id
FROM car_status
WHERE status = "working"
Спасибо!
Решение
DECLARE temp_status_id INT;
SELECT status_id
INTO temp_status_id
FROM car_status;
INSERT INTO cars (type, status_id)
VALUES ('GM',temp_status_id),
('Toyota',temp_status_id),
('Honda',temp_status_id);
Другие советы
Это MS SQL, но я думаю, вы можете сделать что-то вроде этого:
DECLARE @status_id int
SELECT @status_id = status_id FROM car_status WHERE status = 'working'
INSERT INTO cars (type, status_id)
SELECT 'GM', @status_id
UNION
SELECT 'Toyota', @status_id
UNION...
Есть ли какая-то причина, по которой вы хотите сделать это в одном заявлении?Лично я бы просто написал инструкцию insert для каждой строки.Я думаю, вы также могли бы создать временную таблицу со всеми новыми типами, а затем объединить ее с идентификатором статуса.