2017-10-07 121 views
-1

我有一套表,我真的不知道如何使用它们显示一些特定的信息。这些表具有以下结构:我不知道如何编写查询

profs 
profs_id | name 

teaching 
profs_id | course_id 

courses 
course_id | course_title 

我想显示所有没有指定课程的教授。我写了下面的查询,但它不能正常工作:

SELECT p.name 
    FROM profs p 
    JOIN teaching t 
    ON p.id_profs <> t.id_profs; 

我该如何解决这个问题?

+0

我想也是:选择P档.name FROM profs p JOIN teaching t ON p.id_profs = t.id_profs WHERE p.id_profs <> t.id_profs;它也不工作。 – AndrB

+2

任何基本的书或初学者教程都可以满足 – Strawberry

回答

0

你可以采取的一个事实,即左连接将使用的所有记录从FROM子句(即一个用于每个教授条目),然后从左边上的所有记录加入JOIN表的优势。因此,任何没有分配课程的教授都不会有他的记录course_id。在WHERE子句中指定并完成。

SELECT p.name 
FROM profs p 
LEFT JOIN teaching t ON t.profs_id = p.profs_id 
WHERE t.course_id IS NULL 
+1

谢谢!有效!你明白了解得更清楚! :d – AndrB

0
SELECT 
Profs.name 
FROM profs, teaching 
WHERE profs.profs_id = teaching.prof_id 
    AND course_id ISNULL 
0

This question解释型的连接就可以实现,你会如何实现这些目标。在这种情况下,你会想要做一个空的LEFT OUTER JOIN

这从谷歌图片搜索(SQL管理局提供)图片解释了这种绘画方式

enter image description here

其结果是,你的查询将作为工作:

SELECT p.name 
    FROM profs p 
    LEFT OUTER JOIN teaching t 
    ON p.id_profs = t.id_profs 
    WHERE t.id_profs IS NULL;