我不知道如何编写查询

Posted

技术标签:

【中文标题】我不知道如何编写查询【英文标题】:I can't figure out how to write a query 【发布时间】:2017-10-07 21:28:08 【问题描述】:

我有一组表格,但我真的不知道如何使用它们显示一些特定信息。这些表具有以下结构:

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;

我该如何解决这个问题?

【问题讨论】:

我也试过: SELECT p.name FROM profs p JOIN Teaching t ON p.id_profs = t.id_profs WHERE p.id_profs t.id_profs;它也不起作用。 任何基础书籍或初学者教程都足够 【参考方案1】:

您可以利用左连接将使用 FROM 子句中的所有记录(即每位教授一个条目),然后连接 LEFT 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

【讨论】:

谢谢!有效!你说得更清楚明白了! :D【参考方案2】:
SELECT 
 Profs.name 
FROM profs, teaching 
 WHERE profs.profs_id = teaching.prof_id 
    AND course_id ISNULL

【讨论】:

【参考方案3】:

This question 解释了您可以实现的连接类型以及如何实现它们。在这种情况下,您需要执行 LEFT OUTER JOIN where null。

这张来自谷歌图片搜索的图片(由 SQL Authority 提供)以图形方式解释了这一点

因此,您的查询将作为:

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

【讨论】:

以上是关于我不知道如何编写查询的主要内容,如果未能解决你的问题,请参考以下文章

我不确定如何编写下面的查询

创建命名查询!我不知道它是如何创建的

为音乐数据库编写 SQL 查询 [关闭]

我不知道如何循环我的代码的特定部分

我不知道如何在 CPLEX 中编写 (i ∈ V^a∪ V^s) 以下条件?

我正在尝试使用 firstore 和 swiftui 编写一些测试,我可以创建和读取,但现在我不知道如何列出唯一数据,