根据两个数据库进行过滤

时间:2020-03-10 12:52:25

标签: sql-server

我对两个数据库有相同的查询,但是在第一个数据库中可以找到我的数据,而在第二个数据库中则找不到。是否可以在这两个基础上构建,以便我可以过滤第一个基础而不是第二个基础中存在的所有基础。这些是我的SQL查询:

use firstDB;
SELECT A_ANSPRECHPARTNER.AAS_ID FROM A_ANSPRECHPARTNER LEFT OUTER JOIN A_ADRESSEN ON A_ANSPRECHPARTNER.AAS_ADR_ID = A_ADRESSEN.ADR_ID  WHERE ADR_Nr = 106740

use secondDB;
SELECT A_ANSPRECHPARTNER.AAS_ID FROM A_ANSPRECHPARTNER LEFT OUTER JOIN A_ADRESSEN ON A_ANSPRECHPARTNER.AAS_ADR_ID = A_ADRESSEN.ADR_ID WHERE ADR_Nr = 106740

当前结果

enter image description here

1 个答案:

答案 0 :(得分:1)

如果这些数据库位于同一服务器上,则可以在引用该表时将每个查询放在指定数据库名称的子查询中。然后,将firstDB上的子查询与secondDB上的子查询左联接,过滤掉firstDB中有记录的记录,而secondDB中没有记录。

SELECT    DB_1.*
FROM      (
              SELECT          A_ANSPRECHPARTNER.AAS_ID
              FROM            firstDB.dbo.A_ANSPRECHPARTNER
              LEFT OUTER JOIN firstDB.dbo.A_ADRESSEN ON A_ANSPRECHPARTNER.AAS_ADR_ID = A_ADRESSEN.ADR_ID
          ) DB_1
LEFT JOIN (
              SELECT          A_ANSPRECHPARTNER.AAS_ID
              FROM            secondDB.dbo.A_ANSPRECHPARTNER
              LEFT OUTER JOIN secondDB.dbo.A_ADRESSEN ON A_ANSPRECHPARTNER.AAS_ADR_ID = A_ADRESSEN.ADR_ID
          ) DB_2 ON DB_1.ADR_Nr = DB_2.ADR_Nr
WHERE     DB_2.ADR_Nr IS NULL
  AND     DB_1.ADR_Nr = 106740

您只需删除AND DB_1.ADR_Nr = 106740即可在firstDB中找到所有不在secondDB中的记录。如果这些数据库位于不同的服务器上,则必须设置一个链接服务器,并将其添加到表引用的开头。