【问题标题】:Taking Unique Records From Two Tables从两个表中获取唯一记录
【发布时间】:2014-10-30 09:37:31
【问题描述】:

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

表格 student_selection:

Columns
=======
student_id
subject_id
faculty_id

另一个表:sub_group

Columns
=======
subject_id
sub_group

他们在 subject_id 上是联合的。

我想从表 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

【问题讨论】:

    标签: sql yii phpmyadmin


    【解决方案1】:

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

    喜欢:

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

    【讨论】:

    • 谢谢。我试过这个: SELECT t.subject_id FROM ssa_sub_group t LEFT JOIN ssa_student_selection p ON p.subject_id = t.subject_id WHERE t.subject_id NOT IN p.subject_id :为什么错了?
    • 好的。我得到它。我不必加入。谢谢。
    • 感谢您的编辑。下次我会记住的。 stackoverflow.com/questions/26653561/…
    【解决方案2】:

    标准 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;
    

    【讨论】:

      猜你喜欢
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多