2016-10-17 82 views
-1

你好,我有兩個數據庫,每個都有相同的表。例如,我有表稱之爲world,它有4列:pkey1pkey2companyidcompany_name從數據庫中選擇不同的列

我做了一個查詢其搜索具有相同pkey1和pkey2但一個或多個的其他財產的排是不同的2張桌子。我的問題是我怎麼才能看到只有不同的屬性?

這是我的查詢它選擇具有相同pkey1和pkey2的行我怎樣才能升級它來查看兩個數據庫中存在差異的列,當然如果沒有差異查詢的結果應該返回這裏的NULL是我想要達到的一個例子:

在第一個數據庫(1,1,345,'Ron'),第二個數據庫(1,1,377,'Ron')結果應該是(1,1,345 ,null)

+0

「這是我的查詢」 - 不存在您的問題中的查詢。編輯您的問題,併爲所涉及的所有表添加create table語句,您正在使用的完整SQL查詢,一些示例數據和預期輸出。 [_Formatted_](http://stackoverflow.com/editing-help#code)文本請,[沒有屏幕截圖](http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload - 問問題/ 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[]); 

並與你的「世界」表名稱取代「富」,然後更改AS到,涉及到pkey1,pkey2,companyid,COMPANY_NAME等變量

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個密爾柱時,我們會做什麼,case won'工作? – Lara