带有“WITH”子句的SQL语法错误

时间:2015-12-05 14:33:50

标签: 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": invalid identifier

虽然这两种语义相似的陈述都很有用。

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);

为什么在FROM子句中接受它时,它不能识别WHERE中的别名?

1 个答案:

答案 0 :(得分:3)

你应该使用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);