查找id不在其他表SQL中

时间:2017-12-07 16:28:19

标签: sql sql-server

帮助!

我正在尝试找到VBSTEST中不在VMFG9中的客户。表具有相同的模式。每当我运行查询时,我都不会返回结果。

`SELECT [ROWID]
      ,[ID]
      ,[NAME]
      ,[ADDR_1]
      ,[ADDR_2]
      ,[ADDR_3]
      ,[CITY]
      ,[STATE]
      ,[ZIPCODE]
      ,[COUNTRY]
  FROM [VMFG9].[dbo].[CUSTOMER] 
   where NOT EXISTS(
        select v6.[ID]
        from [VBSTEST].[dbo].[CUSTOMER] as v6
        left outer join [VMFG9].[dbo.CUSTOMER] as v9 on  v9.id = v6.[id]
        where v9.id is null);`

3 个答案:

答案 0 :(得分:1)

您想要的子查询不使用join

select . . .
from [VMFG9].[dbo].[CUSTOMER] c
where not exists (select 1
                  from [VBSTEST].[dbo].[CUSTOMER] v6
                  where c.id = v6.id
                 );

如果您愿意,可以在外部查询中使用left join / where。但是单个表引用对于not exists就足够了。

答案 1 :(得分:1)

这样做的简单方法是:

select id from [VBSTEST].[dbo].[CUSTOMER]
except
select id from [VMFG9].[dbo].[CUSTOMER];

你也应该发现这种查询也更快。

除了更长时间,我认为您的查询中存在错误。由于null永远不等于其他任何东西,它甚至不等于null,然后是你的条件:

where v9.id is null

表示条件

v9.id = v6.[id] 

永远不会是真的。

答案 2 :(得分:0)

使用您当前所说的NOT EXISTS,仅在子查询未返回任何结果时选择所有行(否则不返回任何内容)。

子查询本身应该足够了:

select v6.*
from [VBSTEST].[dbo].[CUSTOMER] as v6
left outer join [VMFG9].[dbo.CUSTOMER] as v9 on  v9.id = v6.[id]
where v9.id is null