【问题标题】:Joining these two specific tables加入这两个特定的表
【发布时间】:2013-04-28 05:43:15
【问题描述】:

我今天遇到了一个有趣的问题(或者在我看来是这样),我认为分享它会很有成效。

我有两个具有以下结构的数据库表:

表 1:mod_class

class_id
CSD2311 
CSD2314
CSD12

表 2:m_classes_enrolled_in

student_id   class_id
5            CSD2311
5            CSD2314

所以第一个表包含所有可能的 class_id,第二个表包含 class_id 和注册该课程的学生。我想创建一个学生未注册的所有课程的列表。到目前为止,左连接看起来非常好,但似乎无法以这种方式显示它:

SELECT mod_enrolled_in.class_id 
FROM mod_enrolled_in 
WHERE student_id <> 5 
INNER JOIN mod_class 
ON mod_enrolled_in.class_id = mod_class.class_id

任何帮助将不胜感激, -D

【问题讨论】:

    标签: mysql join left-join


    【解决方案1】:

    你可以通过几种方式做到这一点

    1)

    Select class_id from mod_class
    EXCEPT
        Select class_id From m_classes_enrolled_in WHERE student_id = 5
    

    2)

    Select class_id from mod_class
    Where class_id NOT IN 
          (Select class_id From m_classes_enrolled_in WHERE student_id = 5)
    

    3)

    Select class_id from mod_class m
    LEFT JOIN 
        (Select class_id From m_classes_enrolled_in WHERE student_id = 5) cs
        ON m.class_id = cs.class_id
    WHERE cs.class_id IS NULL
    

    【讨论】:

    • 相当完整的答案。谢谢它完成了这项工作!
    【解决方案2】:

    你不想LEFT JOINmod_class 来反加入吗?

    SELECT mod_class.class_id
    FROM mod_class
    LEFT JOIN mod_enrolled_in ON (mod_class.class_id = mod_enrolled_in.class_id
    AND mod_enrolled_in.student_id = 5)
    WHERE mod_enrolled_in.class_id IS NULL
    

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT c.class_id
      FROM mod_class c
      
      LEFT OUTER JOIN mod_enrolled_in e
      ON e.class_id = c.class_id
      AND e.student_id = ?
      
      WHERE e.student_id IS NULL;
      

      【讨论】:

        【解决方案4】:

        使用这个:-

        Select class_id from mod_class
        Where class_id NOT IN (Select class_id From m_classes_enrolled_in)
        

        看到这个SQL FIDDLE

        【讨论】:

          【解决方案5】:

          这就是你要找的。​​p>

          SELECT mod_enrolled_in.class_id 
          FROM mod_enrolled_in 
          LEFT JOIN mod_class 
          ON mod_enrolled_in.class_id = mod_class.class_id
          WHERE class_id != 5 
          AND mod_class.class_id is NULL
          

          【讨论】:

          • 我尝试了同样的方法,但没有成功。无论如何,谢谢你的回答。
          • 立即尝试..!我编辑了帖子。抱歉,第一次没有阅读整个问题。 :P
          猜你喜欢
          • 1970-01-01
          • 2013-03-09
          • 1970-01-01
          • 1970-01-01
          • 2013-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-25
          相关资源
          最近更新 更多