我在SQL Server中遇到了一个奇怪的行为
我有两个表PrepaidTransactions
和BillingData
,我正在执行以下查询
Select *
from PrepaidTransactions
where customer_Id in
(Select customer_Id
from BillingData
where CommunityId = 10004)
列customer_Id
不属于表BillingData
。查询正在执行并返回PrepaidTransactions
表
但是当我运行以下查询时
Select customer_Id
from BillingData
where CommunityId = 10004
显示错误
列名称'customer_Id'无效。
任何人都可以让我知道为什么第一个查询没有显示任何错误?
答案 0 :(得分:3)
我认为这两篇文章回答了你的问题。
http://support.microsoft.com/kb/298674
这是预期的行为,因为您的列名未绑定到表。因此,如果可以在外部表中解析(在查询的情况下,它可以),则子查询不会失败。如果指定表BillingData.customer_Id,则会出现故障。文章说要遵循这种做法以避免含糊不清。
答案 1 :(得分:2)
哇!我认为在你的第一种情况下,customer_Id被从外部查询中拉出来。您可以通过执行表前缀来测试它:
Select * from PrepaidTransactions where customer_Id in
(Select PrepaidTransactions.customer_Id from BillingData where CommunityId = 10004)
获得相同的结果,但
Select * from PrepaidTransactions where customer_Id in
(Select BillingData.customer_Id from BillingData where CommunityId = 10004)
我打赌这些错误?