【问题标题】:SQL-Server Using "USE" with INNER JOINS and "UNION" togetherSQL-Server 将“USE”与 INNER JOINS 和“UNION”一起使用
【发布时间】:2019-01-10 22:44:43
【问题描述】:

我在同一个查询中看到了大量关于 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 表中,然后查询临时表,但如果可能的话,我想避免这种情况。

【问题讨论】:

    标签: sql sql-server database join


    【解决方案1】:

    非常简单。试试下面的代码:

    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 替换为任何模式。

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

    【讨论】:

      【解决方案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.

      【讨论】:

      • 啊,当然!应该意识到的。我在实际查询中发生了 7 个连接,所以我认为这个概念就在我的脑海中。 Angel M 也是正确的,但 HoneyBadger 是第一个做出回应的人(如果只是勉强回应的话),所以答案是 HoneyBadger。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2020-12-30
      • 2019-03-09
      • 2019-12-28
      • 2012-06-13
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      相关资源
      最近更新 更多