欢迎来到我的小天地,今天的主角是你和我的故事!
题目链接:https://leetcode.cn/problems/combine-two-tables/description/
1.题目介绍
表: Person
+-------------+---------+ | 列名 | 类型 | +-------------+---------+ | PersonId | int | | FirstName | varchar | | LastName | varchar | +-------------+---------+ personId 是该表的主键(具有唯一值的列)。 该表包含一些人的 ID 和他们的姓和名的信息。
表: Address
+-------------+---------+ | 列名 | 类型 | +-------------+---------+ | AddressId | int | | PersonId | int | | City | varchar | | State | varchar | +-------------+---------+ addressId 是该表的主键(具有唯一值的列)。 该表的每一行都包含一个 ID = PersonId 的人的城市和州的信息。
编写解决方案,报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为 null 。
2.解题思路
返回Person表中所有人:left join左连接(从左表那里返回所有的行,即使在右表中没有匹配的行)
其次考虑用on还是where:
on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就会全部过滤掉。
So:
select firstName,lastName,city,state from Person left join Address on Person.personId = Address.personId
3.总结
1.巩固各种连接;
2.理清什么时候用where,什么时候用on;
388

被折叠的 条评论
为什么被折叠?



