我想知道你是否能揭开为什么这两个应该产生相同结果的查询实际产生不同结果的谜团。第一个查询产生的结果不正确。
以下查询显示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
因为它返回右侧的所有空值:
尽管此查询显示某些记录确实存在o.OwnerId=b.systemuserid
:
select distinct assignedto
from Opportunity
where assignedto in (select distinct systemuserid
from crmtestdb.dm1_mscrm.dbo.systemuserbase)
这表明他们确实有这些共同的领域:
这里发生了什么?我究竟做错了什么?如果您需要澄清任何事情,请告诉我。
答案 0 :(得分:6)
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
)
你在相同的事情上不匹配。在一个查询中,您选择Assignedto并将OwnerID
与sytemuserID
匹配,在您搜索的第二个IN
系统用户ID中尝试将第二个查询更改为
select distinct
assignedto
from Opportunity
where OwnerId in (
select distinct
systemuserid
from crmtestdb.dm1_mscrm.dbo.systemuserbase
)