SQL - 选择无效列

时间:2012-04-01 08:28:31

标签: sql sql-server database

我试图选择离开我的桌子时遇到了一点错误。我确信这是一个简单的修复,但我似乎无法找到问题。似乎我的错误消息告诉我,我正在选择一个不存在的列,即使它确实存在。

代码

SELECT TOP (20) id 
FROM school b 
WHERE b.state = school.state 
AND b.id <> school.id 
ORDER BY NEWID()

表“学校”

School table

错误消息

Error msg

3 个答案:

答案 0 :(得分:3)

您希望通过此查询实现什么目标?

在WHERE子句中,您似乎认为您正在从两个表中查询:

WHERE b.state = school.state

但您的FROM子句仅指定一个表:

FROM school b 

错误消息告诉您school.state是无效的标识符。这实际上是正确的,因为您对SCHOOL表有别名,因此只有b.state在语句范围内有效。

我认为你试图找出与其他学校处于同一州的学校的身份证。在这种情况下,您需要将其加入到自身中,如下所示:

SELECT TOP (20) b.id 
FROM school a join school b 
   on  b.state = a.state 
      and  b.id <> a.id

答案 1 :(得分:2)

你正在使表“学校”有别名“b”。一旦这样做,SQL将不再识别列“school.state”。这引出了一个问题,你试图在这里查询的“Where”条件是什么?

答案 2 :(得分:0)

您尚未声明表school并将原始表重命名为别名b。你应该像这样加入表学校:

SELECT TOP (20) id FROM school b
INNER JOIN school s ON b.state = s.state 
WHERE b.id <> s.id 
ORDER BY NEWID()