SQL查询在where子句子查询具有无效列名时返回所有记录...?

时间:2015-07-07 13:32:12

标签: sql sql-server

因此,旧版应用程序中的查询从未起作用,因为子查询错误。 SQL查询如下:

SELECT CompanyName
FROM Companies
WHERE CompanyID = (SELECT CompnyID FROM Users WHERE UserID = 123)

正如您所看到的,在子查询中,CompanyID缺少a并拼写错误。但是,当您运行整个查询时,它将返回公司中的所有记录。但是当您运行子查询时,它会显示“无效的列名'CompnyID'。”为什么会这样?为什么这个查询错误?这有点令我困惑,所以我很好奇为什么这个查询运行。我认为这是一些子查询的怪癖?

谢谢!

1 个答案:

答案 0 :(得分:2)

我想知道这是不是你真正的疑问。您的说明会建议Companies中有一列名为CompnyID

表别名是个好主意。使用子查询时,它们应该是必需的。你以为你在写:

SELECT c.CompanyName
FROM Companies c
WHERE c.CompanyID = (SELECT u.CompnyID FROM Users u WHERE u.UserID = 123);

但是,因为u.CompnyID不存在,所以它被解释为:

SELECT c.CompanyName
FROM Companies c
WHERE c.CompanyID = (SELECT c.CompnyID FROM Users u WHERE u.UserID = 123)

这将返回两个值相同的所有列。

相关问题