SQL查询具有不同的结果

时间:2013-01-31 11:30:10

标签: sql sql-server

我有两个表,我尝试连接一个字段,它在两个查询中给出了不同的结果,应该给出相同的结果。查询是:

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

这怎么可能?

1 个答案:

答案 0 :(得分:3)

我假设客户可以有多个订阅,对吧?假设您有5个客户,每个客户有2个订阅...

当执行SELECT ... FROM Customer WHERE IN(订阅)时,您将收到5条客户记录,因为这5个客户中的每一个实际上都在订阅表中,即使订阅表将有10条记录。您固有地向数据库询问一个表中的数据,其中一个表的值存在于另一个表中。所以它只会返回FROM表中的不同记录,而不管WHERE IN表中的数据量。

另一方面,INNER使用订阅表加入Customer表将返回5个客户x 2个订阅,每个订阅= 10个记录。通过联接表,您要向数据库询问每个表中的所有数据,其中数据与特定字段匹配。

所以是的,2个查询肯定会给你不同的结果。