2014-03-26 2 views
0

먼저 데이터베이스 엔진으로 PSQL을 사용하고 있습니다.SQL 다른 테이블의 단일 필드에서 여러 행 삽입

feed_outputs 
---------------------------- 
id | feed_id | key  ... 
---------------------------- 
6  5  'Feed 1' 
7  5  'Feed 2' 
8  5  'Feed 3' 
9  5  'Feed 4' 
10  5  'Feed 5' 
11  6  'Feed 1' 

그리고 다른 테이블 :

alerts 
------------------------------------------- 
feed_type_id | priority | label | feed_output_id 
------------------------------------------- 
    1   1  'Label1'  11 

는 내가하고 싶은 것은 feed_outputs의 테이블 feed_id=5 및 사용의 모든 피드 출력을 선택하는 INSERT 문을 만드는 것입니다 나는 다음과 같은 테이블이 알림 문에 feed_output_id을 새 행으로 삽입하는 insert 문에서 내가 뭘 해봤

SELECT id FROM feed_outputs where feed_id=5; 
INSERT INTO alerts (feed_type_id,priority,label,feed_output_id) VALUES 
(1,1,'Label2', <each feed_output.id from statement above>); 

:

나는 기본적으로 다음과 같은 두 개의 쿼리 결합하려는

WITH outputs AS (select * from feed_outputs where feed_id=5) 
INSERT INTO alerts (feed_type_id,priority,label,feed_output_id) VALUES 
(1,1,'Label2',(select outputs.id from outputs)); 

을하지만 그것은 분명히 값 섹션에 포함 된 SELECT 문이 작동하지 않습니다 insert 문. 라벨을 동일하게 유지하기를 원할 것입니다 (예제 필드 일뿐입니다). 변화시키고 싶은 유일한 것은 피드 출력 ID입니다. 따라서 최종 알림 표는 다음과 같아야합니다.

alerts 
------------------------------------------- 
feed_type_id | priority | label | feed_output_id 
------------------------------------------- 
    1   1  'Label1'  11 
    1   1  'Label2'  6 
    1   1  'Label2'  7 
    1   1  'Label2'  8 
    1   1  'Label2'  9 
    1   1  'Label2'  10 

현재 테이블 구성에서이 점을 달성하는 데 도움이되는 쿼리를 알고 있습니까?

답변

1

을 나는 이것이 당신이 찾고있는 무엇이라고 생각 :

INSERT INTO alerts (feed_type_id,priority,label,feed_output_id) 
SELECT 1,1,'Label2',id 
    FROM feed_outputs 
WHERE feed_id = 5; 

그냥 권리를하고있어 확인하기 위해 INSERT없이 한 번 SELECT을 실행하십시오 맡은 일. 그런 다음 필요에 따라 쿼리를 조정할 수 있습니다.

INSERT INTO ... SELECT이라고합니다.

http://www.w3schools.com/sql/sql_insert_into_select.asp

+0

w3schools에 연결하지 마십시오. 오류가 가득 찼습니다. Postgres 매뉴얼이 더 나은 선택이었을 것입니다. http://www.postgresql.org/docs/current/static/sql-insert.html –

+0

굉장! 생각보다 단순합니다. 감사! – jrcrawfo

+0

@horse 네, 그렇습니다. 그렇기 때문에 stackoverflow.com이지만 계속 돌아오고 있습니다. :-) –

0

이 그것을 수행해야합니다

INSERT INTO alerts (feed_type_id,priority,label,feed_output_id) 
select 1,1,'Label2', id 
from feed_outputs 
where feed_id=5; 
+0

같은 대답이지만 잠시 후에 ... 감사합니다! – jrcrawfo

+0

@jrcrawfo : 실제로 2 분 일찍 나타남) –