Oracle SQL - 有一个标准的每个变通方法吗?

Dan*_*Dan 5 sql oracle sqlplus having-clause

我无法找到解决Oracle缺乏对HAVING EVERY子句的支持的方法.

我有两个表,生产和电影,具有以下架构:

Production (pid, mid)
Movie(mid, director)
Run Code Online (Sandbox Code Playgroud)

其中'pid'是表示发布者ID的整数,'mid'是表示电影ID的整数,director是电影导演的名称.

我的目标是获得一份出版商名单(按ID),这些出版商只发行由Peter Jackson或Ben Affleck执导的电影.

为了实现这一点,我写了以下查询:

SELECT *
    FROM Production P, Movie M
    WHERE P.mid = M.mid;
    GROUP BY P.pid
    HAVING EVERY ( M.director IN ('Ben Affleck', 'Peter Jackson') );
Run Code Online (Sandbox Code Playgroud)

但由于Oracle不支持HAVING EVERY,所以我得到的是以下错误:

    HAVING EVERY ( M.director IN ('ben affleck', 'PJ') )
                          *
ERROR at line 5:
ORA-00907: missing right parenthesis
Run Code Online (Sandbox Code Playgroud)

由于董事职位必须适用于出版商制作的每部电影,我不相信条件可以转移到WHERE子句.

这条路障有什么办法吗?任何被认为是"标准"的东西?另外(也许更重要的是)为什么Oracle选择不实施HAVING EVERY?

A.B*_*ade 5

尝试这个:

SELECT P.pid
FROM (select distinct Pi.pid, M.Director
      from Production Pi INNER JOIN 
    Movie M ON Pi.mid = M.mid) P
GROUP BY P.pid
HAVING sum(case when P.Director in ('Ben Affleck', 'Peter Jackson') 
           then 1 else 99 end) = 2
Run Code Online (Sandbox Code Playgroud)

这是一个sqlfiddle演示