2009-08-01 7 views
0

'id'열과 'status'열이있는 car_status라는 사전 테이블이 있습니다. , 유형, ID 내가 차에 여러 레코드를 삽입하고 그들에게 "작업"과 관련된 모든 상태를 제공 바라고선택으로 여러 레코드를 삽입하는 mySQL

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

을 status_id :

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

은 내가 열이 자동차라는 테이블이 있습니다. 가장 좋고/가장 쉬운 방법은 무엇입니까? 내가 쿼리 할 수 ​​있고 "작업"상태 ID를 찾은 다음 삽입 쿼리를 수행 할 수 있지만 어쨌든 하나의 삽입 쿼리를 사용하여 그것을 할 조인 또는 선택?

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

단일 성명에서 그것을하고 싶은 몇 가지 이유가 있습니까? 개인적으로, 각 행에 대해 insert 문을 작성합니다. 나는 또한 모든 새로운 유형의 임시 테이블을 만든 다음 상태 ID와 조인 할 수 있다고 생각합니다.

+0

감사합니다. 필자는 퍼포먼스가 하나의 인서트로 더 좋을 것이라고 생각합니다. –

관련 문제