SQL Server将“ USE”与INNER JOINS和“ UNION”一起使用

时间:2019-01-10 22:44:44

标签: sql sql-server database join

在同一查询中,我已经看到有关UNIONINNER JOIN的大量文档,但是找不到有关此特定情况的文档。

这是我要执行的操作的示例,但是此语法无效:

USE DB1
SELECT DISTINCT ResourceTable.ID, CustomerTable.FN
FROM ResourceTable
INNER JOIN CustomerTable ON ResourceTable.CID = CustomerTable.CID
UNION ALL
USE DB2
SELECT DISTINCT ResourceTable.ID, CustomerTable.FN
FROM ResourceTable
INNER JOIN CustomerTable ON ResourceTable.CID = CustomerTable.CID
ORDER BY ResourceTable.ID

因此,基本上,有两个数据库具有相同的架构但数据不同。我需要对它们两个都运行一个INNER JOIN查询,我认为一种可行的方法是UNION

除了第6行,在此行中,我试图引用另一个数据库,这一切都会起作用。我想知道是否有办法做到这一点,而我只是弄错了语法。

一种选择是将两者都插入##temp表中,然后查询临时表,但我想尽可能避免这种情况。

2 个答案:

答案 0 :(得分:3)

非常容易。尝试以下代码:

SELECT DISTINCT ResourceTable.ID, CustomerTable.FN
FROM DB1.dbo.ResourceTable AS ResourceTable 
INNER JOIN DB1.dbo.CustomerTable AS CustomerTable 
ON ResourceTable.CID = CustomerTable.CID
UNION ALL
SELECT DISTINCT ResourceTable.ID, CustomerTable.FN
FROM DB2.DBO.ResourceTable AS ResourceTable 
INNER JOIN DB2.DBO.CustomerTable AS CustomerTable 
ON ResourceTable.CID = CustomerTable.CID
ORDER BY ResourceTable.ID;

这是考虑到如果表在其他模式下,则使用默认模式“ dbo”,只需将dbo替换为任何模式即可。

这种方法对于在不同数据库之间归档数据,比较数据或在不同数据库中的表之间进行任何连接非常有用。

答案 1 :(得分:2)

您可以直接引用数据库:

SELECT DISTINCT ResourceTable.ID, CustomerTable.FN 
FROM DB1..ResourceTable 
INNER JOIN DB1..CustomerTable ON ResourceTable.CID = CustomerTable.CID 
UNION ALL 
SELECT DISTINCT ResourceTable.ID, CustomerTable.FN 
FROM DB2..ResourceTable 
INNER JOIN DB2..CustomerTable ON ResourceTable.CID = CustomerTable.CID
ORDER BY ResourceTable.ID

请注意,您应将..替换为您的架构名称,例如.dbo.