1

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

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

这怎么可能?

4

1 回答 1

3

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

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

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

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

于 2013-01-31T11:36:42.880 回答