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