l--*_*''' 1 sql t-sql sql-server-2008 dynamics-crm-2011
我想知道你是否能揭开为什么这两个应该产生相同结果的查询实际产生不同结果的神秘之处.第一个查询产生不正确的结果.
以下查询显示o.OwnerId=b.systemuserid永远不会成立:
select distinct o.assignedto,b.systemuserid
from Opportunity o
left join crmtestdb.dm1_mscrm.dbo.systemuserbase b
on o.OwnerId = b.systemuserid
Run Code Online (Sandbox Code Playgroud)
因为它返回右侧的所有空值:

鉴于此查询显示o.OwnerId=b.systemuserid某些记录确实如此:
select distinct assignedto
from Opportunity
where assignedto in (select distinct systemuserid
from crmtestdb.dm1_mscrm.dbo.systemuserbase)
Run Code Online (Sandbox Code Playgroud)
这表明他们确实有这些领域的共同点:

这里发生了什么?我究竟做错了什么?如果您需要澄清任何事情,请告诉我.
select distinct
o.assignedto,
b.systemuserid
from Opportunity o
left join crmtestdb.dm1_mscrm.dbo.systemuserbase b
on o.OwnerId=b.systemuserid
--here you are matching Onwer to sysuser
select distinct
assignedto
from Opportunity
where assignedto in (
select distinct
systemuserid
--here you are matching assignedto to sysuser
--this is not equivilant
from crmtestdb.dm1_mscrm.dbo.systemuserbase
)
Run Code Online (Sandbox Code Playgroud)
你没有匹配相同的东西.在一个查询您选择Assignedto和匹配OwnerID,以sytemuserID在第二你正在寻找在那里分配到的INsystemuserId尝试改变第二查询
select distinct
assignedto
from Opportunity
where OwnerId in (
select distinct
systemuserid
from crmtestdb.dm1_mscrm.dbo.systemuserbase
)
Run Code Online (Sandbox Code Playgroud)