(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 一起使用。 ALLUNION 一起使用,而不是与 INTERSECTMINUS 一起使用。尝试不使用...(括号也是不必要的,它们不会伤害任何东西,只是不需要):

select course_id
from section
where semester = 'FALL' AND  year = 2009
intersect
select course_id
from section
where semester = 'SPRING' AND  YEAR = 2010;

显然 PostgreSQL 支持 ALLINTERSECT ,但 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 ALLPostgreSQL 中可用,所以他们可能打算让你使用这种风格而不是 Oracle

关于sql - 当我有选择关键字时丢失选择关键字错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42149463/

10-11 16:08