2

我在 SQL Server 中的查询遇到了一个奇怪的行为

我有两个表PrepaidTransactionsBillingData我正在执行以下查询

Select * 
from PrepaidTransactions 
where customer_Id in
                  (Select customer_Id 
                   from BillingData 
                   where CommunityId = 10004)

该列customer_Id不属于 table BillingDataPrepaidTransactions查询正在执行并返回表中的所有记录,而不是显示错误

但是当我运行以下查询时

Select customer_Id 
from BillingData 
where CommunityId = 10004

它显示错误

列名“customer_Id”无效。

谁能告诉我为什么第一个查询没有显示任何错误?

4

2 回答 2

3

我认为这两篇文章回答了你的问题。

https://connect.microsoft.com/SQLServer/feedback/details/542289/subquery-with-error-does-not-cause-outer-select-to-fail

http://support.microsoft.com/kb/298674

这是预期行为,因为您的列名未绑定到表。因此,如果它可以在外部表中解决(在您的查询的情况下,它可以),那么子查询不会失败。如果您指定表 BillingData.customer_Id,您将失败。文章说要遵循这种做法以避免歧义。

于 2014-03-15T07:53:01.650 回答
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)

我敢打赌,错误?

于 2014-03-15T07:46:41.327 回答