2016-10-17 3 views
-1

안녕하세요 저는 두 개의 데이터베이스가 있으며 각 테이블에는 동일한 테이블이 있습니다. 예를 들어 나는 world을 표라고하고는 4 열이 있습니다 pkey1, pkey2, companyid,데이터베이스에서 다른 열을 선택하십시오.

나도 같은 pkey1 및 pkey2하지만 하나 또는 기타 재산의 대부분을이 행을 검색하는 쿼리를 만들어 company_name이 다르다을 2 개의 테이블. 내 질문은 어떻게 다른 속성을 볼 수 있습니까?

여기에 동일한 pkey1 및 pkey2가있는 행을 선택하는 쿼리가 있습니다. 두 데이터베이스의 차이가있는 열을 보려면 어떻게 업그레이드해야합니까? 차이가없는 경우 쿼리 결과가 반환되어야합니다. 여기 열의 NULL은 달성하고자하는 예제입니다.

첫 번째 데이터베이스 (1,1,345, 'Ron'), 두 번째 데이터베이스 (1,1,377, 'Ron')의 결과는 1,1,345 , null)

+0

"여기 내 쿼리가 있습니다"- 질문에 질문이 없습니다. 질문을 편집하고 관련된 모든 테이블, 사용중인 전체 SQL 쿼리, 일부 샘플 데이터 및 예상 출력에 대한 create table 문을 추가하십시오. [_Formatted_] (http://stackoverflow.com/editing-help#code) text please, [스크린 샷 없음] (http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload -images-of-code-on-so-asking-a-question/285557 # 285557) –

답변

1

기본적으로 다른 데이터베이스에서 데이터를 참조하려면 PostgreSQL을 사용하고 있으므로 데이터베이스 링크가 필요합니다.이 설명서가 도움이됩니다.

https://www.postgresql.org/docs/current/static/dblink.html

당신은 (이름이 경우) 링크를 작성하려면이 명령을 사용해야합니다;

SELECT dblink_connect('CONNECTIONNAME', 'REMOTEDBCONNECTIONSTRING'); 

그런 다음 선택 쿼리를 통해이 새 연결을 사용할 수 있습니다.

SELECT * 
FROM dblink('CONNECTIONNAME','SELECT * FROM foo') AS t(a int, b text, c text[]); 

그리고 당신의 '세계'테이블 이름 'foo는'교체 후 COMPANY_NAME 등 pkey1, pkey2, 회사 ID, 관련 변수에 AS를 변경

1

데이터베이스는 사용자,을 연결하는 경우 값이 변경된 경우 "경우"문 검사와 함께 두 테이블 및 가입하실 수 있습니다 :

select a.pkey1, a.pkey2, 
case when a.companyid <> b.companyid then a.companyid else null end as companyid, 
case when a.company_name <> b.company_name then a.company_name else null end as company_name 
from db1.dbo.world a 
inner join db2.dbo.world b on a.pkey1 = b.pkey1 and a.pkey2 = b.pkey2 

을 당신이 "제외"를 사용할 수없는 차이 행을 생략 할 경우

select a.pkey1, a.pkey2, 
case when a.companyid <> b.companyid then a.companyid else null end as companyid, 
case when a.company_name <> b.company_name then a.company_name else null end as company_name 
from (
    select pkey1, pkey2, companyid, company_name 
    from db1.dbo.world 
    except 
    select pkey1, pkey2, companyid, company_name 
    from db2.dbo.world) a 
inner join db2.dbo.world b on a.pkey1 = b.pkey1 and a.pkey2 = b.pkey2 
+0

'db1.dbo.world'는 Postgres에 유효하지 않습니다 –

+0

우리는 1 mil 컬럼을 가질 때 무엇을해야합니까? 일하니? – Lara

관련 문제