Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle11g 将一列的结果与两个select语句的另一列的结果进行比较()-神谕 问题:_Oracle11g - Fatal编程技术网

Oracle11g 将一列的结果与两个select语句的另一列的结果进行比较()-神谕 问题:

Oracle11g 将一列的结果与两个select语句的另一列的结果进行比较()-神谕 问题:,oracle11g,Oracle11g,如何将一列的结果与两个select语句的另一列的结果进行比较 更多详情: 我只需要一张卖完电影的清单。为此,我需要检查 第一条select语句中租用的电影数量等于或大于第二条select语句中可用电影数量 第一句话 第二项声明 我对这一点还很陌生,我正在努力学习,甚至是关于什么样的工作的建议 我应该使用的语法运算符、表达式等将至少帮助我指明做更多研究的方向。提前感谢鉴于您的数据库结构,可能的解决方案是 SELECT rented.MOVIE_ID ,rented_movies_c

如何将一列的结果与两个select语句的另一列的结果进行比较

更多详情: 我只需要一张卖完电影的清单。为此,我需要检查 第一条select语句中租用的电影数量等于或大于第二条select语句中可用电影数量

第一句话

第二项声明

我对这一点还很陌生,我正在努力学习,甚至是关于什么样的工作的建议
我应该使用的语法运算符、表达式等将至少帮助我指明做更多研究的方向。提前感谢

鉴于您的数据库结构,可能的解决方案是

SELECT rented.MOVIE_ID
      ,rented_movies_count
      ,available_movie_count
  FROM (
        SELECT MOVIE_ID, count(MOVIE_ID) AS rented_movies_count
          FROM MOVIE_QUEUE
         WHERE STATUS_ID=2
        GROUP BY MOVIE_ID
       ) rented
     ,(SELECT MOVIE_ID, count(MOVIE_ID) AS available_movie_count
         FROM dvd
       GROUP BY MOVIE_ID
      ) available
 WHERE rented.movie_id = available.movie_id
   AND rented_movies_count >= available_movie_count 
;
我已经设置了一个示例进行测试。但我想这或多或少是你想到的

但我有点怀疑您的数据库结构是否真的是最佳的!?您是否真的在表dvd中存储了一部电影id的多张唱片

在dvd中为每个电影id保留一条记录以及一些电影属性,并将dvd的租赁状态存储在movie_queue.status_id中,不是更有用吗

如果movie_queue.status_id定义为say

可获得的 …租用 这样,您的查询就会简单得多:

SELECT MOVIE_ID
      ,count(case when status_id = 1 then 1 end) AS available_movie_count
      ,count(case when status_id = 2 then 1 end) AS rented_movies_count
  FROM MOVIE_QUEUE
 GROUP BY MOVIE_ID
HAVING count(case when status_id = 2 then 1 end) >= count(case when status_id = 1 then 1 end)
;

例如,请参见

**我刚刚想好了**我用每个select语句创建了两个视图,然后用>条件将它们连接起来。。。无论如何。。。建议仍然被接受。。。我相信有更好的方法。谢谢你花时间,它很有效!。我确实需要在dvd表中有一张以上的单个电影id记录,因为有多张dvd具有相同的电影标题。现在我知道只有电影1、2和5卖完了!为了获取电影名称,我尝试了这个方法,但它没有给出我想要的结果:选择movie.movie\u name,从选择movie\u ID,将movie\u ID作为租用的电影计数,从movie\u队列中状态\u ID=2按电影\u ID租用分组,选择movie\u ID,按可用电影ID、租用电影ID=可用电影ID和租用电影计数>=可用电影计数统计dvd组中的电影ID可用电影计数;有什么建议吗?再次感谢*可能您还需要将表movie与available.movie\u id=movie.movie\u id连接起来。如果你回答了这个问题,请接受答案,以便其他人知道这是一个已回答的问题。
SELECT rented.MOVIE_ID
      ,rented_movies_count
      ,available_movie_count
  FROM (
        SELECT MOVIE_ID, count(MOVIE_ID) AS rented_movies_count
          FROM MOVIE_QUEUE
         WHERE STATUS_ID=2
        GROUP BY MOVIE_ID
       ) rented
     ,(SELECT MOVIE_ID, count(MOVIE_ID) AS available_movie_count
         FROM dvd
       GROUP BY MOVIE_ID
      ) available
 WHERE rented.movie_id = available.movie_id
   AND rented_movies_count >= available_movie_count 
;
SELECT MOVIE_ID
      ,count(case when status_id = 1 then 1 end) AS available_movie_count
      ,count(case when status_id = 2 then 1 end) AS rented_movies_count
  FROM MOVIE_QUEUE
 GROUP BY MOVIE_ID
HAVING count(case when status_id = 2 then 1 end) >= count(case when status_id = 1 then 1 end)
;