在 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/