在2个表mysql中查找不同的记录

时间:2014-04-28 08:38:41

标签: mysql

假设我有2个表,sport_class和music_class。

enter image description here

我想找到在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;

3 个答案:

答案 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提供的解决方案都适合你! :)