小编典典

为什么在子查询中不显示“ nnvalid column name XYZ”错误?虽然列名不在子查询表中?

sql

当我运行此查询时

SELECT CustomerId FROM Stocks.dbo.Suppliers

它给了我这个错误。无效的列名“
CustomerId”。此错误是有效的,因为“供应商”表中没有“客户ID”列;但是当我在子查询中使用相同的查询时,它没有给出任何错误信息,例如

SELECT * 
  FROM SomeOtherDb.dbo.Customer 
 WHERE CustomerId In( SELECT CustomerId 
                        FROM Stocks.dbo.Suppliers)

在这里,我期望出现相同的错误“无效的列名”,但是查询运行时没有任何错误。

完全限定的名称仅是约定,两个数据库都位于同一服务器上。

CustomerId确实存在于SomeOtherDb.dbo.Customer表中,但不存在于子查询中。

为什么会这样呢?这与子查询有关吗?

谢谢。


阅读 128

收藏
2021-04-22

共1个答案

小编典典

子查询从外部查询继承列。

我猜你的SomeOtherDb.dbo.Customer确实有一个CustomerId列(似乎也可能来自名称)。

然后,这也可能意味着您没有对子查询进行任何操作-
如果子查询中的表没有CustomerId列(看来是这样,否则在以下情况下运行子查询时不会出错)本身),则子查询选择并返回外部CustomerId,由于这是子查询中的唯一列,因此该子查询是无用的。

2021-04-22