gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:23:43 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com