sql - Oracle SQL - 是否有标准的 HAVING EVERY 解决方法?

标签 sql oracle sqlplus having-clause

我很难找到解决 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/

相关文章:

sql - Oracle sql - 连接所有列

sql - 如何删除表中的重复行

sql - 如何更改 Oracle 中 View 的列大小

database - Oracle可选关系

sql - 在数据库中更新/插入/检索重音字符?

sql - 实现递归 CTE 以对 MariaDB 进行分层查询

php - 为什么查询显示结果,但大部分参数值都是错误的?

sql - 什么会导致 Oracle ROWID 发生变化?

sql - 从sql导出到excel

oracle - 如何将序列中的下一个值放入变量中?