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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top