如何使用 SQL 连接合并表? [复制]

Posted

技术标签:

【中文标题】如何使用 SQL 连接合并表? [复制]【英文标题】:How to combine tables using SQL Joins? [duplicate] 【发布时间】:2019-12-12 15:55:15 【问题描述】:

我有这三个表:

学生

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”

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

【问题讨论】:

阅读左连接.. 我同意您必须查看您的联接,但请注意,除此之外您的问题毫无意义。你有三个表,其中两个看起来非常相似,然后你解释一些东西,谁知道呢,最后,在你真正的问题中,有第四个表。什么? 【参考方案1】:

您必须在作为主表(携带大部分数据)的表上使用左联接,如您的情况 pass。这意味着当pass left join...other tables 完成时,pass 表的数据都匹配和不匹配的数据将是输出。

而,

Inner Join 给出只与其他表数据匹配的数据。 pass innerjoin other tables 将只有两个表中的匹配数据,但没有不匹配的数据(当您应用左连接时,它会给出左表的不匹配数据+两个表的匹配数据,反之亦然)

【讨论】:

好吧,假设 pass 表上的所有数据都是空的,我使用编码: $query="select * from borrow left join student on borrow.student_id=student_id left join pass on borrow.student_id =student.student_id”。我的 student_id、idborrow、no_laptop、lend_date、pass_date、send_date 变为 null,尽管借表上已有数据【参考方案2】:

您可以使用 left join 代替 inner join。 difference of join types

【讨论】:

【参考方案3】:

这是因为,您使用的是INNER JOIN。请阅读this article。您应该使用LEFT JOINFULL OUTER JOIN,具体取决于您想要的数据。

【讨论】:

以上是关于如何使用 SQL 连接合并表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SQL 查询连接两个表? [复制]

如何在 SQL Server 中连接类型表? [复制]

如何在id上合并两个表sql?

使用SQL语句如何对Excel工作表数据进行查询

如何使用 innerJoinAndSelect 将两个表合并为一个?

合并复制如何初始化发布和订阅