我有两个表,我尝试连接一个字段,它在两个查询中给出了不同的结果,应该给出相同的结果。查询是:
SELECT * FROM tblCustomer tca
WHERE tca.PhoneNumber IN(
SELECT ts.SubscriptionNumber FROM sub.tblSubscription ts
WHERE ts.ServiceTypeID=4
AND ts.SourceID=-1
)
和
SELECT tca.*
FROM sub.tblSubscription ts
inner JOIN tblCustomer tca
ON ts.SubscriptionNumber = tca.PhoneNumber
WHERE ts.ServiceTypeID = 4
AND ts.SourceID = -1
这怎么可能?
答案 0 :(得分:3)
我假设客户可以有多个订阅,对吧?假设您有5个客户,每个客户有2个订阅...
当执行SELECT ... FROM Customer WHERE IN(订阅)时,您将收到5条客户记录,因为这5个客户中的每一个实际上都在订阅表中,即使订阅表将有10条记录。您固有地向数据库询问一个表中的数据,其中一个表的值存在于另一个表中。所以它只会返回FROM表中的不同记录,而不管WHERE IN表中的数据量。
另一方面,INNER使用订阅表加入Customer表将返回5个客户x 2个订阅,每个订阅= 10个记录。通过联接表,您要向数据库询问每个表中的所有数据,其中数据与特定字段匹配。
所以是的,2个查询肯定会给你不同的结果。