在同一查询中,我已经看到有关UNION
和INNER 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
表中,然后查询临时表,但我想尽可能避免这种情况。
答案 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.
。