假设我有2个表,sport_class和music_class。
我想找到在music_class中但在sport_class中没有的学生数量。 期望的结果是:2(朱莉娅和彼得)。请帮助我,谢谢。
这就是我的尝试:
SELECT COUNT(DISTINCT x.name) AS diff_user
from sport_class x RIGHT
JOIN music_class y ON x.name = y.name
WHERE x.name != y.name;
答案 0 :(得分:2)
select *
from music_class
where name NOT IN (select name from sport_class);
这适用于您的情况。下次请在问题中添加您尝试的内容,而不是在评论中(当问自己时)
答案 1 :(得分:2)
以下查询将为您提供快速结果,即使表格大小很大,它也能为您提供快速结果。
SELECT
COUNT(distinct m.name)
FROM music_class m
LEFT JOIN sport_class s
ON m.name=s.name
WHERE s.name IS NULL;
注意:为了获得更好的结果,名称列上应该有索引。
答案 2 :(得分:1)
了解查询失败的原因(它始终是了解错误的好方法)
SELECT COUNT(DISTINCT x.name) AS diff_user
from sport_class x RIGHT
JOIN music_class y ON x.name = y.name
WHERE x.name != y.name;
您将join子句赋予x.name = y.name
但是where
子句与它完全矛盾
x.name != y.name
,
因此,where
子句会为您提供!=
结果集,然后Join
会尝试将其过滤为x.name = y.name
,因此输出将为NULL设置我猜你的情况。
解决方案
Zafar和Amit提供的解决方案都适合你! :)