2009-08-01 7 views
0

J'ai une "table de dictionnaire" appelée car_status qui a une colonne 'id' et une colonne 'status'.mySQL insertion de plusieurs enregistrements avec une sélection

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

J'ai une table appelée les voitures avec les colonnes: id, type, status_id

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

J'espère insérer plusieurs enregistrements dans les voitures et leur donner tout l'état associé à « travailler ». Quel est le meilleur/le plus simple? Je sais que je peux interroger et trouver le status_id qui "fonctionne", et puis faire une requête d'insertion, mais est-il de toute façon de le faire avec une requête d'insertion en utilisant une jointure ou sélectionnez?

J'ai essayé des choses comme:

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" 

Merci!

Répondre

1
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); 
+0

Ceci est pour MySQL. –

+1

Merci! Vous êtes vraiment sage au-delà de vos années. –

0

Ceci est MS SQL, mais je pense que vous pouvez faire quelque chose comme ceci:

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

Y at-il une raison que vous voulez faire dans une seule déclaration? Personnellement, je voudrais juste écrire une instruction d'insertion pour chaque ligne. Je suppose que vous pouvez également créer une table temporaire avec tous les nouveaux types, puis joindre cela avec l'ID d'état.

+0

Merci. Je pense que la performance sera meilleure avec un insert. –

Questions connexes