【问题标题】:SQL 'Invalid object name'SQL '无效的对象名称'
【发布时间】:2021-11-27 21:12:42
【问题描述】:

我尝试在 SELECT collect 中放置一个子查询来创建一个新表。这是我写的:

select 
    f.FacNo, FacFirstName
from 
    Faculty f, 
    (select FacNo from Offering
     where OffTerm = 'FALL' and CourseNo like 'IS%') T
where
    f.FacNo in (select FacNo from T)

但是,子查询总是报错

无效的对象名称'T'

但是,如果我将子查询移动到 WHERE 子句,它会起作用:

select 
    FacNo, FacFirstName
from
    Faculty
where
    FacNo in (select FacNo from Offering 
              where OffTerm = 'FALL' and CourseNo like 'IS%')

另外,如果我在 where 子句中将 'IN' 更改为 '=',第一个错误查询也有效:

select 
    f.FacNo, FacFirstName
from
    Faculty f, 
    (select FacNo from Offering
     where OffTerm = 'FALL' and CourseNo like 'IS%') T
where
    f.FacNo = T.FacNo

这是否意味着如果我们在SELECT 子句中创建子查询表,我们只能在以下查询中对子查询表使用'='?请帮忙。非常感谢!

【问题讨论】:

  • 顺便说一句,1992 年以前的基于逗号的连接语法真的不需要;现代的 JOIN...ON 语法总是更清晰。

标签: sql


【解决方案1】:

第一个查询失败,因为子查询 T 超出了另一个子查询的范围。

但我认为这也可以通过使用EXISTS来解决

SELECT FacNo, FacFirstName
FROM Faculty AS f
WHERE EXISTS
(
    SELECT 1
    FROM Offering AS o
    WHERE o.FacNo = f.FacNo
      AND o.OffTerm = 'FALL' 
      AND o.CourseNo LIKE 'IS%'
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 2018-08-08
    相关资源
    最近更新 更多