SQL语法错误,为“0”;加上;条款

SQL语法错误,为“0”;加上;条款,sql,oracle,with-statement,where-in,Sql,Oracle,With Statement,Where In,在WHERE子句中使用WITH alias时遇到奇怪的问题。 问题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 time

在WHERE子句中使用WITH alias时遇到奇怪的问题。 问题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);