mySQL inserindo vários registros com um seleto
Pergunta
Eu tenho uma "mesa dicionário" chamado car_status que tem uma coluna 'id' e uma coluna de 'status'.
car_status
id status
1 broken
2 fixed
3 working
4 fast
5 slow
Eu tenho uma tabela chamados carros com as colunas: id, tipo, status_id
cars
id type status_id
1 jeep 1
2 ford 3
3 acura 4
Estou esperando para inserir vários registros em carros e dar-lhes todo o estado associado a "trabalhar". Qual é a melhor / mais fácil? Eu sei que posso consultar e encontrar o status_id que está "trabalhando", e em seguida, fazer uma consulta de inserção, mas é alguma maneira de fazê-lo com uma consulta de inserção usando uma junção ou selecione?
Eu tentei coisas como:
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"
Obrigado!
Solução
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);
Outras dicas
Este é o MS SQL, mas eu acho que você pode fazer algo como isto:
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...
Existe algum motivo você quer fazê-lo em uma única instrução? Pessoalmente, eu tinha acabado de escrever uma instrução de inserção para cada linha. Eu acho que você também pode criar uma tabela temporária com todos os novos tipos e, em seguida, juntar-se que, com o ID de status.