连接来自不同数据库的同名表的结果

Posted

技术标签:

【中文标题】连接来自不同数据库的同名表的结果【英文标题】:Join results from tables with same name from different databases 【发布时间】:2009-12-16 15:10:04 【问题描述】:

假设我们有两个数据库,一个名为 db1,另一个名为 db2。 两个数据库都有一个名为Employees 的表。无论如何,即使它们具有相同的名称,是否也可以连接两个表的结果?

请注意,这两个表没有冲突的字段名称。我知道这很愚蠢,但我们必须为现有数据库创建一个扩展数据库,并且为了简单起见,我们希望两个数据库中的表名相同。

非常感谢您的帮助,谢谢

我也知道这里回答了一个类似的问题,但我发现它在这种情况下没有帮助。

【问题讨论】:

你用的是什么品牌的数据库? 【参考方案1】:

您应该能够通过它们的完全限定名称来引用这些表。如果它们在不同的模式中,您可以说:

SELECT * FROM Schema1.MyTable as T1 JOIN Schema2.MyTable as T2 ON T1.Something = T2.SomethingElse

如果它们实际上是不同的数据库,则需要一个数据库链接,在这种情况下,它会变为 MyTable1@Database1 等。

【讨论】:

非常感谢,我不知道为什么我在这么简单的时候尝试使用连接。竖起大拇指的伙计!感谢所有发帖的人,但我会把这个奖励给第一个发帖的人,我认为这是公平的。【参考方案2】:

是的,你绝对可以这样做,你只需要像这样给它们起别名:

SELECT ... FROM [db1].[dbo].[Employees] as e1 INNER JOIN [db2].[dbo].[Employees] as e2 ON ...

然后你可以通过引用e1.MyColumne2.MyOtherColumn得到你需要的。

【讨论】:

【参考方案3】:

您应该能够通过 database.owner.table 引用它们,例如db1.dbo.Employees 和 db2.dbo.Employees(假设表归 dbo 所有)

【讨论】:

是的,我试过了,但是在添加 INNER JOIN db2.Employees ON db2.Employees.EmpId = db1.Employees.UUID 后查询立即失败了两个表中都存在数据,因此连接本身不应该失败,这就是为什么我认为使用相同的表名会出现问题。【参考方案4】:

select * from db1,db2 where db1.employee=db2.employee 这是你的意思吗?

【讨论】:

以上是关于连接来自不同数据库的同名表的结果的主要内容,如果未能解决你的问题,请参考以下文章

如何连接来自多个表的数据,保留所有不同的值

mysql 查询的字段来自多个表时的笛卡尔现象和解决不同表同名问题

01-多表查询

连接来自两个不同表的两列

在sql中组合来自不同表的数据

SQL Server 相当于 MySQL 的 USING