"WITH"子句的 SQL 语法错误

标签 sql oracle with-statement where-in

在 WHERE 子句中使用WITH 别名时遇到奇怪的问题。 问题SQL语句:

WITH CROOM AS (SELECT id FROM classroom WHERE floor = 1)
SELECT DISTINCT teacher_id
FROM timetable
WHERE classroom_id IN CROOM;

错误是ORA-00904:“CROOM”:无效标识符

虽然这两个语义相似的语句都效果很好。

SELECT DISTINCT teacher_id
FROM timetable
WHERE classroom_id IN (SELECT id FROM classroom WHERE floor = 1);

WITH CROOM AS (SELECT id FROM classroom WHERE floor = 1)
SELECT DISTINCT T.teacher_id 
FROM timetable T JOIN CROOM ON (T.classroom_id = CROOM.id);

为什么它无法识别 WHERE 中的别名,而在 FROM 子句中接受别名?

最佳答案

您应该使用 CROOM 作为表格。例如你可以这样写:

WITH CROOM AS (SELECT id FROM classroom WHERE floor = 1)
SELECT DISTINCT teacher_id
FROM timetable
WHERE classroom_id IN (select id from CROOM);

关于 "WITH"子句的 SQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34106675/

相关文章:

mysql - 列不能外连接到子查询

oracle - 为什么 Oracle 在 Oracle Apps/E-Business Suite 中没有外键?

python - 我的代码犯了什么错误?

python-3.x - For/if 状态以一种方式工作,但不以另一种方式工作

sql - 在 MySQL 中,如何编写 INSERT-INTO-VALUES 查询,以便在具有相同主键值的记录已存在时将其静默丢弃?

sql - SQL Server 的分组字符串聚合/LISTAGG

sql 查询喜欢在列表顶部订购精确匹配

python - python 2.4.3 中的临时文件语法

sql - 参数日期之间的周数 - 按周分组 - SQL

java - 我们如何分析 JOOQ 语句的速度