如何比较(<或>)一列的结果与两个select语句的另一列的结果?
我只需要列出售完电影的清单。要做到这一点,我需要检查是否 第一个select语句中rented_movie_count上的数字等于或大于第二个select语句中available_movie_count上的数字。
第一声明
result of the
select MOVIE_ID, count(MOVIE_ID) as rented_movies_count
from MOVIE_QUEUE
WHERE STATUS_ID=2
group by MOVIE_ID;
第二声明
select MOVIE_ID, count(MOVIE_ID) as available_movie_count
from dvd
group by MOVIE_ID;
我仍然很新,我正在努力学习,甚至建议什么样的 我应该使用的语法(运算符,表达式等)至少会指向我的方向来做更多的研究。提前致谢
答案 0 :(得分:1)
鉴于您的数据库结构,可能的解决方案是
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
;
我在http://www.sqlfiddle.com/#!4/3fc59/11上设置了一个示例进行测试。但我想这或多或少是你想出来的。
但我有点怀疑你的数据库结构真的是最优的!?您是否真的在表movie_id
中为单dvd
存储了多条记录?
在movie_id
中每个dvd
只有一条记录以及一些电影属性并且将dvds的租借状态存储在movie_queue.status_id
中会不会更有用吗?
如果将movie_queue.status_id
定义为
然后您的查询会更容易:
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)
;