質問

「辞書テーブル」があります「id」列と「status」列を持つcar_statusと呼ばれます。

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

id、type、status_idの列を持つcarsというテーブルがあります

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

複数のレコードを車に挿入し、「作業中」に関連付けられているすべてのステータスを提供したいと考えています。最良/最も簡単な方法は何ですか?クエリを実行して、" working"である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"

ありがとう!

役に立ちましたか?

解決

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

他のヒント

これは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で結合することもできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top