SQL LEFT JOIN的IN连接条件改为多AND相等连接是否正确?
SQL语句改写正确性分析
你的改写完全不正确,两者逻辑天差地别:
- 原语句逻辑
原SQL:
LEFT JOIN #Phones P ON P.Phone_SID IN (F.MobilePhone_SID, F.HomePhone_SID, F.OfficePhone_SID, F.PrimaryPhone_SID, F.SecondaryPhone_SID)
这个条件的意思是:只要P.Phone_SID匹配F表中五个手机号SID字段里的任意一个,就能关联到对应的#Phones记录。
- 改写后语句逻辑
改写后的SQL:
Left join #Phones P ON P.Phone_SID = F.MobilePhone_SID AND P.Phone_SID =F.HomePhone_SID AND P.Phone_SID =F.ScondaryPhone_SID
这个条件要求P.Phone_SID同时等于F.MobilePhone_SID、F.HomePhone_SID、F.ScondaryPhone_SID三个字段的值——只有当这三个字段的值完全相同时,才会关联成功,这和原逻辑完全相悖,几乎得不到符合预期的结果。
另外还要注意:你改写时遗漏了原语句里的OfficePhone_SID和PrimaryPhone_SID,还出现了拼写错误:ScondaryPhone_SID应该是SecondaryPhone_SID。
内容的提问来源于stack exchange,提问作者Veera Brahmam Vunnam
相关产品推荐
相关产品推荐

