我很难找到解决 Oracle 缺乏对 HAVING EVERY 子句支持的方法。
我有两个表,Production 和 Movie,具有以下架构:
Production (pid, mid)
Movie(mid, director)
其中'pid'是代表发行商ID的整数,'mid'是代表电影ID的整数,而director是电影导演的名字。
我的目标是获取仅出版由彼得 jackson 或本阿弗莱克执导的电影的出版商列表(按 ID)。
为了实现这一点,我编写了以下查询:
SELECT *
FROM Production P, Movie M
WHERE P.mid = M.mid;
GROUP BY P.pid
HAVING EVERY ( M.director IN ('Ben Affleck', 'Peter Jackson') );
但是由于 Oracle 不支持 HAVING EVERY,我得到的只是以下错误:
HAVING EVERY ( M.director IN ('ben affleck', 'PJ') )
*
ERROR at line 5:
ORA-00907: missing right parenthesis
因为导演必须适用于发行商制作的每部电影,我不相信可以将条件移至 WHERE 子句。
有没有办法绕过这个障碍?任何被认为是“标准”的东西?另外(也许更重要的是)为什么 Oracle 选择不实现 HAVING EVERY?
最佳答案
尝试这个:
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
Here is a sqlfiddle demo
关于sql - Oracle SQL - 是否有标准的 HAVING EVERY 解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15012329/