从两个表中获取独特记录

时间:2014-10-30 09:37:31

标签: sql yii phpmyadmin

我陷入了一个愚蠢的问题。它必须是最陈词滥调的解决方案之一。

student_selection:

Columns
=======
student_id
subject_id
faculty_id

另一个表:sub_group

Columns
=======
subject_id
sub_group

他们是subject_id的联合。

我想从table sub_group中找到那些subject_id,其中,subject_id不存在于student_selection表中。

例如:

sub_group(subject_id)
2
3
4

student_selection(subject_id)
2
3
2
3
2
3

输出

4

2 个答案:

答案 0 :(得分:0)

您可以运行简单的not in查询来获取数据。

像:

SELECT 
    subject_id
FROM 
    sub_group
WHERE
    subject_id not in (
        SELECT 
            DISTINCT subject_id 
        FROM
            student_selection
    )

答案 1 :(得分:0)

标准SQL IN子句:

select subject_id from sub_group
where subject_id not in (select subject_id from student_selection);

标准SQL EXISTS子句:

select subject_id from sub_group sg
where not exists 
  (select * from student_selection ss where ss.subject_id = sg.subject_id);

设置基于查询。一些dbms支持基于集合的操作。他们使用单词EXCEPT或MINUS从一个集合中减去另一个集合。 (MySQL不支持此。)

select subject_id from sub_group
except
select subject_id from student_selection;

最后你可以使用一个技巧,你可以在外面加入第二个表,并且只保留那些有外部连接记录的结果(即第二个表中没有macthing记录)。这也是标准的SQL。对于没有经验的读者来说,它的可读性较差,但在某些dbms上碰巧更快。

select sg.subject_id 
from sub_group sg
left join student_selection ss on ss.subject_id = sg.subject_id
where ss.subject_id is null;