2009-08-01 25 views
0

「id」列と「status」列を持つcar_statusという辞書表があります。選択のある複数のレコードを挿入するmySQL

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

私は列を持つ車と呼ばれるテーブルがあります:ID、タイプは、私は車の中に複数のレコードを挿入し、それらを「作業」に関連したすべてのステータスを与えることを期待しています

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

をSTATUS_ID。何が最高の/最も簡単な方法ですか?私は、クエリと "作業中"であるstatus_idを見つけることができると知っているし、挿入クエリを行うが、とにかく1つの挿入クエリを使用してそれを行うには、結合または選択?

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" 

ありがとう:

は、私のようなものを試してみました!

答えて

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

これはMySQL用です。 –

+1

ありがとう!あなたは本当にあなたの年を超えて賢いです。 –

0

これはMS SQLですが、私はあなたがこのような何かができると思う。

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

を使用すると、単一のステートメントでそれをやりたい、いくつかの理由がありますか?個人的には、私はちょうど各行の挿入ステートメントを書くだろう。あなたはまた、すべての新しいタイプのテンポラリテーブルを作成し、それをステータスIDと結合することもできると思います。

+0

ありがとうございます。 1つのインサートでパフォーマンスが向上すると思います。 –

関連する問題