2012-02-02 2 views
-1

Possible Duplicate:
Combine two tables that have no common fields2 개의 완전히 다른 테이블을 병합하는 방법은 무엇입니까?

나는 하나 하나 개의 테이블에 아무런 공통점이없는 두 테이블, (아니 열, 아니 ID를) 병합 찾고 있어요. 보고 용입니다. 테이블 1의 모든 열과 테이블 2의 모든 열을 가져 와서 1 개의 테이블에 넣어야하므로 데이터가 변경되지 않으므로 2 개의 테이블에있는 것이 아니라 1이됩니다.

표 : KeyboardID, Computermodel, factory

표 2 : 결합하는 2 MouseID, Speakers, Circuitboard

새로운 테이블 : KeyboardID, Computermodel, factory, MouseID, Speakers, Circuitboard

업데이트 : 자신을 명확히거야 :

여기 내 상황이 있습니다. View1 : StarID, Planet, Sun 다음으로 View2: StarID, Planet, Sun 볼 수 있듯이 열 이름은 똑같습니다.

StarID, Planet, Planet2, Sun, Sun2이 같은 3보기 모양을 갖는 상관 없어

: 여기 StarID, StarID2, Planet, Planet2, Sun, Sun2

는 캐치를, 그렇지 않은 내가 같이 내 3 번째보기를 기대하고있어 어떻게 여기입니다 전혀 관련이 없으므로 불행히도 내가 기술적으로 위선적 인 표현을 사용하지 않는다면 View2의 StarIDStarID에 추가되거나 완전히 별개의 열에 있어야합니다 (데이터에 아무 관계가 없기 때문에) "StarID에 가입하십시오" 에

+0

두 테이블의 행 수가 동일합니까? –

+0

은 어떤 식 으로든 관련이있는 두 개의 테이블입니까? –

+0

아니요 어쨌든 관련이 없습니다. 그리고 그렇습니다. 그들은 같은 수의 열이되고, 우연의 일치입니다. – user1183513

답변

2

당신이 사용할 수있는 (내가 포스트 그레스에 비교적 새로운 해요 뷰 고유성 제약이 있는지 확실하지 않습니다) StarID 고유하지 않을 수 있습니다, 일을 복잡하게 full outer join :

FULL OUTER JOIN

First, an inner join is performed. Then, for each row in T1 that does not satisfy the join condition with any row in T2, a joined row is added with null values in columns of T2. Also, for each row of T2 that does not satisfy the join condition with any row in T1, a joined row with null values in the columns of T1 is added.

그래서 쿼리는 것 예 :

select 
    *   -- or explicitly list column names 
from 
    <table1> 
full outer join 
    <table2> on <some join condition> 

조인 조건은 항상 거짓이어야합니다. 결과는 같을 것이다 : "다른"테이블의 컬럼은 항상 null 것을

KeyboardID Computermodel factory  MouseID  Speakers  Circuitboard 
1   something  something3 (null)  (null)  (null)  
2   something2  something4 (null)  (null)  (null)  
(null)  (null)   (null)  17   something5 something8 
(null)  (null)   (null)  22   something6 something7 

공지 사항 및 행의 수는 (표 1의 행 수) + (표 2의 행 수)입니다 .


참고 : 저는 PostGresQL 전문가가 아니므로이 쿼리를 테스트 할 기회가 없었습니다.

+1

나는 그것이 그가 원하는 것을 의심한다. –

+0

@aF. - 그와는 반대로, 그가 원하는 것 같습니다. –

+0

그가 같은 줄에 없어? –

0

이 답변을보십시오. paxdiablo는 이것을 성취하기위한 옵션에 대해 가장 명확하고 완전한 설명을주었습니다.표 3 INTO

https://stackoverflow.com/a/1198234/1042438

+0

모든 대답은 관계가없는 경우에는 할 수 없다는 결론입니다./ – user1183513

+0

여러 가지 방법이 있습니다. 문제는 원하는 최종 결과가 무엇인지에 맞출 것입니다. – Brian

-1

INSERT (KeyboardID, Computermodel 공장) SELECT * 표 FROM ;

INSERT INTO 테이블 3 (MouseID, 스피커, 회로 기판) SELECT * FROM table2;

데이터를 삽입 할 수 있습니다.이 명령을 사용하면 동적으로 테이블을 만들어야합니까?

+0

나는 그것을 고려했지만보고 목적으로 사용하고 있으며, 박쥐에서 바로 결과를 얻는 쿼리가 필요합니다. – user1183513

0

양면이 실제로는 서로 관련이없는 두 가지 업적 정보를 함께 해킹하려는 것처럼 들립니다.

row_number()를 사용하여 키를 합성 할 수 있습니다. 여기 포스트 그레스를 가지고 있지 않지만,이 같은 작동 될 수 있습니다

SELECT * FROM 
    (SELECT KeyboardID, Computermodel, factory, row_number() as num FROM Table1) AS X 
FULL OUTER JOIN 
    (SELECT MouseID, Speakers, Circuitboard, row_number() as num FROM Table2) AS Y 
ON x.num = y.num 

이 임의로 중복되지, 두 테이블에서 행을 일치합니다.

합성 '키'를 생성하면 "(null)"값을 모두 얻지 못할 수도 있습니다.

+0

행 수가 다르면 어떻게 될까요? –

+0

@MattFenwick :'FULL OUTER JOIN'으로 변경했습니다. – egrunin

+0

오류 : function row_number()가 존재하지 않습니다. 힌트 : 지정된 이름 및 인수 유형과 일치하는 함수가 없습니다. 명시 적 타입 캐스트를 추가해야 할 수도 있습니다. – user1183513

관련 문제