Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 基于两个数据库的过滤器_Sql Server - Fatal编程技术网

Sql server 基于两个数据库的过滤器

Sql server 基于两个数据库的过滤器,sql-server,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

我在两个数据库上有相同的查询,但是在第一个数据库中它找到了我的数据,而在第二个数据库中它没有。是否有可能建立在这两个基础上,以便我可以过滤第一个基础中存在的所有基础,而不是第二个基础。以下是我的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
当前结果


如果这些数据库位于同一台服务器上,则可以将每个查询放入子查询中,在引用表时指定数据库名称。然后左键将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

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

您的预期结果是什么?@D-Shih这只是一个基于ADR的示例,其中数据存在,而数据不存在,我希望得到一个理想的结果,即第一个数据库中存在所有ADR_Nr,而第二个数据库中不存在所有ADR_Nr。@D-Shih这可能吗?非常感谢您的帮助,这已经产生了一些结果,我只需要一个所有的列表,例如从DB_1 ADR_NR,其中0,而DB_2 ADR_NR==0,比如DB_2.ADR_NR为NULL,DB_1.ADR_NR不为NULL,这是可能的?这就是上面的查询所做的。左联接是联接左侧的表/查询中的所有记录,只有与联接右侧的表/查询中的联接条件匹配的记录。因此,根据定义,在我的答案DB_1.ADR_Nr中写入查询的方式将不会为空。通过添加
DB_2.ADR_Nr为NULL的where子句
可以满足该要求。