2012-01-13 2 views
1

하나의 테이블에있는 여러 행의 데이터를 새 테이블의 단일 열에 병합하려면 어떻게합니까?새 테이블에서 여러 행의 데이터를 단일 열로 병합하는 방법은 무엇입니까?

create table new_paragraphs 
(
    id NUMBER 
    paragraph CLOB 
); 

create table old_paragraphs 
(
    id 
    paragraph CLOB 
); 

merge into new_paragraphs a 
using (select * from old_paragraphs) b 
on (id = id) 
when matched then 
update set a.paragraph = a.paragraph || b.paragraph; 
-- Results in error: unable to get a stable set of rows in the source tables 

위의 예외는 예외를 throw합니다.

+0

사실, ORA-00918 '결과 : 열 모호 defined'. –

답변

0

그것은 작동합니다 (ID 가정하면 두 테이블의 기본 키입니다) * new_paragraph *)보다

다른, 당신은 on (a.id = b.id)를 읽고 너무 on (id = id)에서 별칭을 사용하려면 :

merge into new_paragraphs a 
using (select * from old_paragraphs) b 
on (a.id = b.id) 
when matched then 
update set a.paragraph = a.paragraph || b.paragraph; 
0

여기에 MERGE을 쓰는 이유는 무엇입니까? 왜 간단한 UPDATEid이 각 ID에 대해 고유한다면 적어도 * old_paragraphs이 * (또는 발견의 기본 키 인 경우

UPDATE new_paragraphs a 
    SET paragraph = (select a.paragraph || b.paragraph 
         from old_paragraphs b 
        where a.id = b.id) 
WHERE EXISTS (SELECT 1 
       FROM old_paragraphs b 
       WHERE a.id = b.id) 
+0

old_paragraphs에 ID 당 1 행 이상이 있습니다. 귀하의 쿼리를 실행하면 예외가 발생합니다. ORA-01427 : 단일 행 하위 쿼리가 두 개 이상의 행을 반환합니다. – firebird

+0

@firebird - OK. 따라서 'ID'는 'OLD_PARAGRAPHS'의 기본 키가 아닙니다. 이전 단락의 데이터가 추가 된 순서를 신경 써야합니까? –

관련 문제