MySQL вставка нескольких записей с помощью выбора - PullRequest
0 голосов
/ 01 августа 2009

У меня есть «словарная таблица» с именем car_status, в которой есть столбец «id» и столбец «status».

car_status
id     status
1      broken
2      fixed
3      working
4      fast
5      slow

У меня есть таблица автомобилей с колонками: id, type, status_id

cars
id    type    status_id
1     jeep     1
2     ford     3
3     acura    4

Я надеюсь вставить несколько записей в автомобили и присвоить им статус, связанный с «рабочим». Какой самый лучший / самый простой способ? Я знаю, что могу запросить и найти «status_id», который «работает», а затем выполнить запрос на вставку, но есть ли возможность сделать это с одним запросом на вставку, используя соединение или выбор?

Я пробовал что-то вроде:

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"

Спасибо!

Ответы [ 2 ]

1 голос
/ 01 августа 2009
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);
0 голосов
/ 01 августа 2009

Это 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...

Есть ли причина, по которой вы хотите сделать это в одном утверждении? Лично я бы просто написал оператор вставки для каждой строки. Я полагаю, вы могли бы также создать временную таблицу со всеми новыми типами и затем присоединить ее к идентификатору статуса.

...