如何使用SQL Join合并表?

时间:2019-08-05 06:34:15

标签: php mysql sql inner-join

我有这三个表:

学生

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为null。如果我使用:

$query=”select * from student 
        inner join book on student.student_id=book.student_id 
        inner join pass on book.student_id=pass.student_id”

仅在密码表中有数据时显示,而在密码表为空时则不显示。

3 个答案:

答案 0 :(得分:0)

这是因为您正在使用INNER JOIN。请阅读this article。您应该使用LEFT JOINFULL OUTER JOIN,具体取决于所需数据的精确程度。

答案 1 :(得分:0)

您可以使用左联接代替内部联接difference of join types

答案 2 :(得分:0)

您必须在主表(承载大多数数据)的表上使用左联接,如您的情况pass。这意味着完成pass left join...other tables时,通过表的数据都匹配且不匹配的数据将作为输出。

内部联接提供的数据仅与其他表数据匹配。 pass innerjoin other tables仅是两个表中的匹配数据,而不会是不匹配的数据(当您向左应用联接时,将给出左表的不匹配数据+两个表的匹配数据,反之亦然)