[英]Joining these two specific tables
I have encountered a interesting problem today (or so it seems to me) and I thought it would be productive to share it. 我今天遇到了一个有趣的问题(或者在我看来似乎如此),我认为分享它会很有成效。
I have two database tables with the following construct: 我有两个数据库表,具有以下构造:
Table 1: mod_class 表1:mod_class
class_id
CSD2311
CSD2314
CSD12
Table 2: m_classes_enrolled_in 表2:m_classes_enrolled_in
student_id class_id
5 CSD2311
5 CSD2314
So the first table has all possible class_id's and the second one has class_id's and the student that is enrolled in that class. 因此,第一个表具有所有可能的class_id,第二个表具有class_id和在该类中注册的学生。 I would like to create a list of all classes that the student is not enrolled in .
我想创建一个学生未注册的所有课程列表。 So far a left-join looked really nice but it seems impossible to display it in this way:
到目前为止,左连接看起来非常好,但似乎不可能以这种方式显示它:
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
Any help would be greatly appreciated, -D 任何帮助将不胜感激,-D
You could do that several ways 你可以用几种方法做到这一点
1) 1)
Select class_id from mod_class
EXCEPT
Select class_id From m_classes_enrolled_in WHERE student_id = 5
2) 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) 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
This is what you are looking for. 这就是你要找的东西。
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
Don't you want to LEFT JOIN
mod_class
so you can do an anti-join? 你不想
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
Try this: 尝试这个:
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;
Use this:- 用这个:-
Select class_id from mod_class
Where class_id NOT IN (Select class_id From m_classes_enrolled_in)
See this SQL FIDDLE 请参阅此SQL FIDDLE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.