SQL程序从一个表中查找与另一个表中的所有行关联的行
我有三张桌子SQL程序从一个表中查找与另一个表中的所有行关联的行,sql,Sql,我有三张桌子 电影(电影编号、姓名、演员等) 客户(客户id(密钥)、姓名、性别等) 观看电影(客户id、电影id、电影价格等) 我想找出所有与某位演员一起看了所有电影的女性客户的姓名 我在为此编写SQL查询时遇到问题 有人能帮我吗?此查询查找所有客户,他们确实没有看过任何电影: SELECT * FROM customer WHERE gender = 'F' AND NOT EXISTS ( SELECT * FROM movies WHERE actor = '
- 电影(电影编号、姓名、演员等)
- 客户(客户id(密钥)、姓名、性别等)
- 观看电影(客户id、电影id、电影价格等)
有人能帮我吗?此查询查找所有客户,他们确实没有看过任何电影:
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
)
);
如果有很多数据,速度不会太快,但会做你想做的事情
顺便说一句,您知道存储在电影表中的演员存在规范化问题,对吗
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)
细分:
- 来自客户+其中c.gender=‘女性’
- 加入电影+男演员='男演员
2。所有有特定演员的电影
。因此,让我们查找客户/电影组合的所有手表和电影记录
- 左键连接在客户/电影上观看电影
- 按客户id、姓名、性别分组
- 注意:在此处和“选择”对话框中,根据需要从customer表中列出尽可能多的列
- 拥有计数(不同的m.mov_id)=计数(不同的w.mov_id)
- 注意:我们使用distinct是因为客户可以观看电影3次,如果没有distinct,这将计3次
什么是RDBMS?SQL是一种语言,不是数据库。您的数据结构没有意义。一部电影有不止一个演员。你真的应该试着描述什么
不起作用
,而不仅仅是陈述它。我们不能进步,因为没有什么可以继续的。