如何使用 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 JOIN
或FULL OUTER JOIN
,具体取决于您想要的数据。
【讨论】:
以上是关于如何使用 SQL 连接合并表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章