连接sql表以选择连接表中不存在的记录[重复]

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

或者你可以用谷歌搜索“加入 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

【讨论】:

以上是关于连接sql表以选择连接表中不存在的记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何连接表以选择连接表中的最大行? [复制]

HQL 左外连接用于查找一个表中存在而其他表中不存在的记录

MySQL内部连接查询以获取其他表中不存在的记录

如何用sql语句查询:在一个表中存在而另一个表中不存在的第一条记录?

连接多个表后如何从sql查询结果中删除重复记录

sql查询两表中不重复记录