简体   繁体   English

加入这两个特定的表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM