帮助!
我正在尝试找到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);`
答案 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