Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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
Mysql SQL不存在以查找某些问题_Mysql_Sql_Not Exists - Fatal编程技术网

Mysql SQL不存在以查找某些问题

Mysql SQL不存在以查找某些问题,mysql,sql,not-exists,Mysql,Sql,Not Exists,我正在练习一些SQL(这是新的), 我有下面几张桌子: screening_occapancy(idscreening,row,col,idclient) screening(screeningid,idmovie,idtheater,screening_time) 我试图创建一个查询来搜索哪些客户观看了“屏蔽”表中的所有电影,并显示他们的ID(idclient) 这是我写的(不起作用): 我知道这可能不太好,所以请尝试解释一下我做错了什么 我的任务是在做的时候使用not/exists 谢谢

我正在练习一些SQL(这是新的), 我有下面几张桌子:

screening_occapancy(idscreening,row,col,idclient)
screening(screeningid,idmovie,idtheater,screening_time)
我试图创建一个查询来搜索哪些客户观看了“屏蔽”表中的所有电影,并显示他们的ID(idclient)

这是我写的(不起作用):

我知道这可能不太好,所以请尝试解释一下我做错了什么

我的任务是在做的时候使用not/exists


谢谢

虽然子查询中不需要使用
select distinct
,但您的查询基本上没有问题:

select p.idclient
from screening_occapancy p
where not exists (select 1
                  from screening s
                  where s.screeningid = p.idscreening
                 );
注:

  • 您可以在
    exists
    子查询中选择任何内容。选择列会产生误导
  • 使用表别名并将其用于所有列引用,尤其是在相关子查询中
  • 如果您正在设计表,我建议您将主键和外键命名为相同的名称(
    screeningid
    idscreening
    ,但不能同时命名)
编辑:

如果你想要看所有电影的客户,我会这样做:

select p.idclient
from screening_occapancy p
group by p.idclient
having count(distinct p.screening_occapancy p) = (select count(*) from screening);

为什么不计算screening_表中的电影数量,将其加载到一个变量中,然后对照该变量检查查询结果的结果

将电影数量加载到变量中(由idmovie标识):

根据变量检查查询结果:

    SELECT A.idclient, 
    count(DISTINCT(idmovie)) AS number_of_movies_watched,
    FROM screening_occapancy A
    INNER JOIN screening B
    ON(A.idscreening = B.screeningid)
    GROUP BY A.idclient
    HAVING number_of_movies_watched = @number_of_movies ;
如果要查找参加所有放映的所有客户,请将idmovie替换为screeningid。

即使是对MySQL比较陌生的人也能理解这个问题。“不存在”-方法更难理解。

谢谢,但是我的+your'e查询确实有效(即使有一个客户观看了所有内容…),无需在子查询中使用
独特的
    SELECT count(DISTINCT(idmovie)) FROM screening INTO @number_of_movies;
    SELECT A.idclient, 
    count(DISTINCT(idmovie)) AS number_of_movies_watched,
    FROM screening_occapancy A
    INNER JOIN screening B
    ON(A.idscreening = B.screeningid)
    GROUP BY A.idclient
    HAVING number_of_movies_watched = @number_of_movies ;