MySQL, вставляющий несколько записей с помощью select

StackOverflow https://stackoverflow.com/questions/1215788

  •  06-07-2019
  •  | 
  •  

Вопрос

У меня есть "таблица словаря" под названием 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 для каждой строки.Я думаю, вы также могли бы создать временную таблицу со всеми новыми типами, а затем объединить ее с идентификатором статуса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top