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?
尝试这个:
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)
| 归档时间: |
|
| 查看次数: |
1953 次 |
| 最近记录: |