Mysql SQL不存在以查找某些问题
我正在练习一些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 谢谢
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 ;