如何使用 SQL Joins 合并表?

我有这三个表:


学生


student_id 012345

name       Lee

class      5A

gender     Male

nohp       011-1111111

笔记本电脑


idborrow    5

student_id  012345  

no_laptop   LP12345

lend_date   01/08/2019

pass_date   NULL

send_date   01/11/2019       

经过


idborrow    5

student_id  012345

no_laptop  LP12345

lend_date  01/08/2019 

pass_date  01/08/2019   

send_date  01/11/2019

我想加入统计表(如果老师不同意):


student_id  012345 

name        Lee   

class       5A    

gender      Male    

nohp        011-1111111    

idborrow    5      

no_latop   LP12345 

lend_date  01/08/2019

pass_date  NULL  

send_date  01/11/2019

如果老师批准他,就会是这样:


student_id  012345 

name        Lee   

class       5A    

gender      Male    

nohp        011-1111111    

idborrow    5      

no_latop   LP12345 

lend_date  01/08/2019

pass_date  01/08/2019  

send_date  01/11/2019

我使用编码:


$query=”select * from student 

        inner join book on student.student_id=book.student_id”

但是,它只显示 pass_date 为空的表。如果我使用:


$query=”select * from student 

        inner join book on student.student_id=book.student_id 

        inner join pass on book.student_id=pass.student_id”

它只显示它是否在传递表上有数据,但如果传递表为空则不显示。


ABOUTYOU
浏览 147回答 3
3回答

慕运维8079593

这是因为,您正在使用INNER JOIN. 请阅读这篇文章。您应该使用LEFT JOIN或FULL OUTER JOIN,具体取决于您想要数据的准确程度。

当年话下

您可以使用left join而不是inner join。 连接类型的差异

跃然一笑

您必须在作为主表(承载大部分数据)的表上使用左连接,就像您的情况一样pass。这意味着当pass left join...other tables完成时,通过表的数据既匹配又不匹配的数据将是输出。然而,Inner Join 给出只与其他表数据匹配的数据。pass innerjoin other tables将只来自两个表的匹配数据,但没有不匹配的数据(当您应用左连接时,它会给出左表的不匹配数据+两个表的匹配数据,反之亦然)
打开App,查看更多内容
随时随地看视频慕课网APP