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!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top