5

今日、私は興味深い問題に遭遇しました (または私にはそう思われます)。それを共有することは生産的だと思いました。

次の構成を持つ 2 つのデータベース テーブルがあります。

表 1: mod_class

class_id
CSD2311 
CSD2314
CSD12

表 2: m_classes_enrolled_in

student_id   class_id
5            CSD2311
5            CSD2314

したがって、最初のテーブルには可能なすべての class_id が含まれ、2 番目のテーブルには 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

4

5 に答える 5

2

あなたはそれをいくつかの方法で行うことができます

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
于 2013-05-03T18:29:46.967 に答える
1

これはあなたが探しているものです。

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
于 2013-05-03T18:29:36.793 に答える
1

LEFT JOIN mod_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
于 2013-05-03T18:29:55.537 に答える
1

これを試して:

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;
于 2013-05-03T18:30:33.250 に答える