Sql 从数据库中选择不同的列

Sql 从数据库中选择不同的列,sql,postgresql,Sql,Postgresql,你好,我有两个数据库,每个数据库都有相同的表。例如,我有一个名为world的表,它有4列:pkey1、pkey2、companyid、company_name 我做了一个查询,搜索具有相同pkey1和pkey2的行,但它们的一个或多个其他属性在这两个表中不同。我的问题是如何只看到不同的属性 这是我的查询它选择具有相同pkey1和pkey2的行我如何升级它以查看两个数据库中存在差异的列,当然如果没有差异,查询结果应在列中返回NULL这是我想要实现的示例: 在第一个数据库1,1345,'Ron',第

你好,我有两个数据库,每个数据库都有相同的表。例如,我有一个名为world的表,它有4列:pkey1、pkey2、companyid、company_name

我做了一个查询,搜索具有相同pkey1和pkey2的行,但它们的一个或多个其他属性在这两个表中不同。我的问题是如何只看到不同的属性

这是我的查询它选择具有相同pkey1和pkey2的行我如何升级它以查看两个数据库中存在差异的列,当然如果没有差异,查询结果应在列中返回NULL这是我想要实现的示例:


在第一个数据库1,1345,'Ron',第二个数据库1,1377,'Ron'中,结果应该是1,1345,null

基本上参考不同数据库中的数据,您需要一个数据库链接,因为您使用的是PostgreSQL,此文档应该有帮助

在本例中,您需要使用此命令创建带有名称的链接

SELECT dblink_connect('CONNECTIONNAME', 'REMOTEDBCONNECTIONSTRING');
然后,您可以通过select查询使用此新连接

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

并将“foo”替换为“world”表名,然后将AS更改为与pkey1、pkey2、companyid、COMPANYU名称等相关的变量。

如果数据库已链接,则可以连接两个表,并使用case语句检查值是否已更改:

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

这是我的疑问-不,你的问题中没有疑问。编辑您的问题,并为所有涉及的表、您正在使用的完整SQL查询、一些示例数据和预期输出添加CREATETABLE语句。text请问,db1.dbo.world对Postgres无效当我们有1 mil列时该怎么办,case不起作用?