mySQL insertando múltiples registros con un select
Pregunta
Tengo una " tabla de diccionario " llamado car_status que tiene una columna 'id' y una columna 'status'.
car_status
id status
1 broken
2 fixed
3 working
4 fast
5 slow
Tengo una tabla llamada cars con las columnas: id, type, status_id
cars
id type status_id
1 jeep 1
2 ford 3
3 acura 4
Espero insertar varios registros en los automóviles y darles todo el estado asociado con "trabajar". ¿Cuál es la forma mejor / más fácil? Sé que puedo consultar y encontrar el status_id que está "funcionando", y luego hacer una consulta de inserción, pero ¿hay alguna forma de hacerlo con una consulta de inserción usando una combinación o selección?
Probé cosas 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"
¡Gracias!
Solución
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);
Otros consejos
Esto es MS SQL, pero creo que puedes hacer algo como esto:
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...
¿Hay alguna razón por la que quieras hacerlo en una sola declaración? Personalmente, solo escribiría una declaración de inserción para cada fila. Supongo que también podría crear una tabla temporal con todos los tipos nuevos y luego unirla con la identificación de estado.