具有不同结果的SQL查询
问题描述:
我有两个表,我试图通过一个字段进行联接,并且它在两个查询中给出了不同的结果,这些结果应该会给出相同的结果。查询是:具有不同结果的SQL查询
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
这怎么可能?
答
我假设客户可以有多个订阅,对不对?我们假设您有5个客户,每个客户有2个订阅...
当执行SELECT ... FROM Customer WHERE IN(订阅)时,您将收到5个客户记录,因为这5个客户中的每一个实际上都在订阅表,即使订阅表将有10条记录。您本质上要求数据库从一个表中获取数据,其中一个字段的值存在于另一个表中。所以它只会返回FROM表中的不同记录,而不管WHERE IN表中的数据量。
另一方面,INNER JOIN的客户表与订阅表将返回5客户x 2订阅每个= 10条记录。通过加入表格,您要求数据库查找每个表格中的所有数据,其中数据与特定字段进行匹配。
所以是的,这2个查询肯定会给你不同的结果。
有什么区别?关系是一对一还是另一个? –
你能告诉我们数据和表格定义吗? – SQLGuru
'IN'是一个半连接,由于'1..n'关系不会带来重复。它比内部加入更有效,然后用'DISTINCT'删除重复项。 –