Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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
SQL程序从一个表中查找与另一个表中的所有行关联的行_Sql - Fatal编程技术网

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、电影价格等)
我想找出所有与某位演员一起看了所有电影的女性客户的姓名

我在为此编写SQL查询时遇到问题


有人能帮我吗?

此查询查找所有客户,他们确实没有看过任何电影:

 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)中观看了所有电影,则每个(m)记录将有一个(w)记录
    • 拥有计数(不同的m.mov_id)=计数(不同的w.mov_id)
    • 注意:我们使用distinct是因为客户可以观看电影3次,如果没有distinct,这将计3次

  • 什么是RDBMS?SQL是一种语言,不是数据库。您的数据结构没有意义。一部电影有不止一个演员。你真的应该试着描述什么
    不起作用
    ,而不仅仅是陈述它。我们不能进步,因为没有什么可以继续的。