2011-06-14 2 views
2

"author"테이블에있는 모든 저자의 "books"테이블에 레코드를 삽입하고 싶습니다.하나의 열이 가변 값일 때 어떻게 PostgreSQL 8.4에 행을 삽입합니까?

> 1 - "Herman Melville" 
> 2 - "Stephen King" 
> 3 - "Truman Capote" 

... 다음은 "책"테이블에 이러한 결과를 얻을 것이다 삽입 :

> 'Hello World' - 1 
> 'Hello World' - 2 
> 'Hello World' - 3 

I 다음 INSERT 문이 (즉,이 경우 저자 테이블을 표현) 실제로 원유 예입니다,하지만 목적을 보여줍니다

INSERT INTO books (title, author_id) VALUES ('Hello World', SELECT id FROM author); 

불행하게도,이 실패하고 나는 "저자"테이블에서 "ID"각 값을 얻는 방법을 확실 해요. 각 저자에 대해 동일한 항목을 삽입 할 것 왜

답변

9

그것은 분명하지 않다,하지만 당신은 다음과 같이 당신의 INSERT에 대한 소스로 SELECT를 사용할 수 있습니다

INSERT INTO books (title, author_id) 
    SELECT 'Hello World', id 
    FROM author 

편집 : 좀 더 많은 정보를 원하시면 INSERT의 경우 docs을 확인하십시오. 보시다시피 원본은 기본 값, 값 또는 쿼리가 될 수 있습니다. 이해하기 쉬운 수 있습니다

INSERT INTO books (title, author_id) 
    VALUES ('Hello World', (SELECT id FROM author WHERE...)); 

이 구문을하지만, 다른 구문으로 지적 :

INSERT INTO books (title, author_id) SELECT 'Hello World', id FROM author; 
3

당신이 하나를 사용할 수 있습니다 VALUES가없는 다른 주석가는 아마도 더 깨끗합니다. 삽입하려는 레코드를 SELECT로 삽입 한 다음 INSERT하면됩니다. 당신이 distict 분야에 대한 많은 subselects했다면 그것은 또한 더 효율적일 수 있습니다.

1
INSERT INTO books (title, author_id) SELECT 'Hello World', id FROM author 
+0

위의 것과 똑같은 속독. 답변을 삭제 해보십시오. – Huuuze

+0

@Huuuze 공정하게 말하자면, "위의 하나"는 이후 18 분 후에 게시되었습니다. 지역 사회가 그들이 좋아하는 것을 결정하게하십시오. –

+0

@Lasse Um, 아니요. 투표가 끝난 후, 그것은 두 번입니다 - 정확히 같은 시간에 게시됩니다. 다음 번에 더 자세히 살펴보십시오. – Huuuze

2

당신은 또한 괄호로 부속을 둘러싸고 수 있습니다

관련 문제