【问题标题】:Join sql tables to select records which does not exists in joined table [duplicate]连接sql表以选择连接表中不存在的记录[重复]
【发布时间】:2014-06-06 13:03:48
【问题描述】:

如何连接表以选择连接表中不存在的记录。 例如。我有一个表格文件、学生、文件夹

我正在开发学生支付系统,因此我想选择某个学期没有支付的学生

1.table学生和文档可以在student.student_id加入

2.Table 文件夹存储学期它可以与文件夹中的文档连接。folder_id

【问题讨论】:

  • 或者你可以用谷歌搜索“加入 sql 表以选择不存在的记录。”

标签: mysql sql


【解决方案1】:

文档表中不存在的所有学生:

select 
  students.*
from
  students
left join
  documents on documents.student_id = students.student_id 
where
  documents.document_id is null

选择学期有点棘手,但逻辑相同:

select 
  students.*
from
  students
left join
  (
   select documents.* from documents 
   inner join folders on folders.folder_id = documents.folder_id
   where folders.folder_id = 3
   ) as t1 on t1.student_id = students.student_id 
where
  t1.document_id is null

SQLFiddle demo

您可以查看/阅读此Visual Representation of SQL Joins

【讨论】:

  • 谢谢,第二个工作正常
【解决方案2】:

使用LEFT JOIN 构造,并查找您希望丢失的表中包含 NULL 数据的行。

对于您的特定示例,例如:

SELECT Student.Student_id
FROM Student
    LEFT JOIN Documents ON Student.Student_id = Documents.Student_id
WHERE Documents.Student_id IS NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多