我有三张桌子
- 电影 (mov_id(key), 姓名, 演员,...)
- 客户(cust_id(key),姓名,性别,....)
- watch_movie (cust_id mov_id, movie_price,...)
我想找出与某个演员一起看过所有电影的所有女性顾客的姓名。
我无法为此编写 SQL 查询。
有人可以帮帮我吗?
我有三张桌子
我想找出与某个演员一起看过所有电影的所有女性顾客的姓名。
我无法为此编写 SQL 查询。
有人可以帮帮我吗?
select c.cust_id, c.name, c.gender
from customer c
join movies m on m.actor = 'Actor'
left join watches_movie w on w.cust_id=c.cust_id and m.mov_id=w.mov_id
where c.gender = 'Female'
group by c.cust_id, c.name, c.gender
having count(distinct m.mov_id) = count(distinct w.mov_id)
分解:
2. ALL the movies with a particular actor
。所以让我们找到客户/电影组合的所有watches_movie记录
此查询查找所有确实不存在他们未看过的电影的客户:
SELECT * FROM customer WHERE gender = 'F' AND NOT EXISTS
(
SELECT * FROM movies WHERE actor = 'Particular Actor' AND mov_id NOT IN
(
SELECT mov_id FROM watches_movie WHERE cust_id = customer.cust_id
)
);
如果有很多数据,不会太快,但会做你想做的事。
顺便说一句,您知道存储在电影表中的演员存在标准化问题,对吗?