(select course_id
from section
where semester = 'FALL' AND year = 2009)
intersect all
(select course_id
from section
where semester = 'SPRING' AND YEAR = 2010);
我正在阅读 Henry Korth 的数据库系统概念。我正在尝试完全按照书中的方式进行交集,但是当我确实有选择关键字时,我会丢失选择关键字错误。
编辑:看起来我只有在使用“intersect all”时才会出错,但“intersect”工作正常
最佳答案
您不要将 ALL
部分与 INTERSECT
中的 Oracle
一起使用。 ALL
与 UNION
一起使用,而不是与 INTERSECT
或 MINUS
一起使用。尝试不使用...(括号也是不必要的,它们不会伤害任何东西,只是不需要):
select course_id
from section
where semester = 'FALL' AND year = 2009
intersect
select course_id
from section
where semester = 'SPRING' AND YEAR = 2010;
显然
PostgreSQL
支持 ALL
和 INTERSECT
,但 Oracle
不支持。我确实看到可以使用以下方法模仿它的位置:with intersect_tbl as
(
select course_id, row_number(partition by course_id) as rnum
from section
where semester = 'FALL' AND year = 2009
intersect
select course_id, row_number(partition by course_id) as rnum
from section
where semester = 'SPRING' AND YEAR = 2010
)
select course_id
from intersect_tbl;
既然你提到你找到你的例子的书是你的学校分配的,我会向他们澄清你是否应该在类里面使用特定的 DBMS。正如我提到的
INTERSECT ALL
在 PostgreSQL
中可用,所以他们可能打算让你使用这种风格而不是 Oracle
。关于sql - 当我有选择关键字时丢失选择关键字错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42149463/