我有这三个表:
学生
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”
仅在密码表中有数据时显示,而在密码表为空时则不显示。
答案 0 :(得分:0)
这是因为您正在使用INNER JOIN
。请阅读this article。您应该使用LEFT JOIN
或FULL OUTER JOIN
,具体取决于所需数据的精确程度。
答案 1 :(得分:0)
您可以使用左联接代替内部联接。 difference of join types
答案 2 :(得分:0)
您必须在主表(承载大多数数据)的表上使用左联接,如您的情况pass
。这意味着完成pass left join...other tables
时,通过表的数据都匹配且不匹配的数据将作为输出。
而
内部联接提供的数据仅与其他表数据匹配。 pass innerjoin other tables
仅是两个表中的匹配数据,而不会是不匹配的数据(当您向左应用联接时,将给出左表的不匹配数据+两个表的匹配数据,反之亦然)