Domanda

Ho una tabella dei dizionari " chiamato car_status che ha una colonna "id" e una colonna "status".

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

Ho una tabella chiamata cars con le colonne: id, type, status_id

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

Spero di inserire più record nelle auto e dare loro tutto lo stato associato a "funzionamento". Qual è il modo migliore / più semplice? So di poter eseguire una query e trovare lo status_id che sta funzionando " e quindi eseguire una query di inserimento, ma c'è comunque modo di farlo con una query di inserimento utilizzando un join o selezionare?

Ho provato cose come:

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"

Grazie!

È stato utile?

Soluzione

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);

Altri suggerimenti

Questo è MS SQL, ma penso che tu possa fare qualcosa del genere:

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...

C'è qualche motivo per cui vuoi farlo in una singola istruzione? Personalmente, scriverei solo un'istruzione insert per ogni riga. Immagino che potresti anche creare una tabella temporanea con tutti i nuovi tipi e poi unirti a quella con lo status ID.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top