SQL-选择无效列

SQL-选择无效列,sql,sql-server,database,Sql,Sql Server,Database,我在尝试从表中选择时遇到了一个小错误。我相信这是一个简单的解决办法,但我似乎无法找到问题。似乎我的错误消息告诉我,我正在从一个不存在的列中选择,即使它确实存在 代码 SELECT TOP (20) id FROM school b WHERE b.state = school.state AND b.id <> school.id ORDER BY NEWID() 选择顶部(20)id b学校 其中b.state=school.state 和b.id学校id NEWID()

我在尝试从表中选择时遇到了一个小错误。我相信这是一个简单的解决办法,但我似乎无法找到问题。似乎我的错误消息告诉我,我正在从一个不存在的列中选择,即使它确实存在

代码

SELECT TOP (20) id 
FROM school b 
WHERE b.state = school.state 
AND b.id <> school.id 
ORDER BY NEWID()
选择顶部(20)id
b学校
其中b.state=school.state
和b.id学校id
NEWID()命令
表格“学校”

错误消息


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

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

您没有声明table
school
并将原始表重命名为别名
b
。您应该像这样加入table school:

SELECT TOP (20) id FROM school b
INNER JOIN school s ON b.state = s.state 
WHERE b.id <> s.id 
ORDER BY NEWID()
从学校b中选择前(20)个id
b.state=s.state上的内部连接学校s
其中b.id s.id
NEWID()命令

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

SELECT TOP (20) id FROM school b
INNER JOIN school s ON b.state = s.state 
WHERE b.id <> s.id 
ORDER BY NEWID()
从学校b中选择前(20)个id
b.state=s.state上的内部连接学校s
其中b.id s.id
NEWID()命令

您试图通过此查询实现什么

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

WHERE b.state = school.state
但是FROM子句只指定一个表:

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

我认为你在试图识别与其他学校处于同一状态的学校的ID。在这种情况下,您需要将其自身连接起来,如下所示:

SELECT TOP (20) b.id 
FROM school a join school b 
   on  b.state = a.state 
      and  b.id <> a.id
选择顶部(20)b.id
从a学校加入b学校
在b.state=a.state上
和b.id a.id

您试图通过此查询实现什么

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

WHERE b.state = school.state
但是FROM子句只指定一个表:

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

我认为你在试图识别与其他学校处于同一状态的学校的ID。在这种情况下,您需要将其自身连接起来,如下所示:

SELECT TOP (20) b.id 
FROM school a join school b 
   on  b.state = a.state 
      and  b.id <> a.id
选择顶部(20)b.id
从a学校加入b学校
在b.state=a.state上
和b.id a.id

我想有一张表格“b”。如果school和b是您从中选择的不同表,请在它们之间添加注释。@David SQL语法不是这样工作的。如果在FROM子句中指定一个表,然后在其后立即加上任何非关键字的内容,则该表将成为该表的别名。@TISONT。我知道,但提出问题的人可能不知道。使用他提供的SQL,他似乎在比较两个表。他应该提供他的SQL表,以及他试图完成的任务。@David然后对这个问题发表评论,而不是对dbaseman的答案发表评论,因为它脱离了上下文。我认为有一个表“b”。如果school和b是您从中选择的不同表,请在它们之间添加注释。@David SQL语法不是这样工作的。如果在FROM子句中指定一个表,然后在其后立即加上任何非关键字的内容,则该表将成为该表的别名。@TISONT。我知道,但提出问题的人可能不知道。使用他提供的SQL,他似乎在比较两个表。他应该提供他的SQL表,以及他试图完成的任务。@David然后对这个问题发表评论,而不是对dbaseman的答案发表评论,因为它脱离了上下文。您需要提供更多关于这个问题的上下文信息:查询是如何运行的?它应该做什么?我的直觉是,查询中需要有两个参数,但我们需要查看查询是如何形成的,以便建议如何添加它们。如果我之前不清楚,请原谅。幸运的是,有人能挑选出我需要的东西。问题已解决;)您需要提供更多与此相关的上下文信息:查询是如何运行的?它应该做什么?我的直觉是,查询中需要有两个参数,但我们需要查看查询是如何形成的,以便建议如何添加它们。如果我之前不清楚,请原谅。幸运的是,有人能挑选出我需要的东西。问题已解决;)你是对的,我试图随机选择20所属于同一州的学校。和。。您的查询有效;)我不得不把学校id改成b.id。非常感谢!!你是对的,我试图随机选择20所属于同一州的学校。和。。您的查询有效;)我不得不把学校id改成b.id。非常感谢!!