题目地址:https://leetcode-cn.com/problems/combine-two-tables/
- 表1: Person
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
+-------------+---------+
PersonId 是上表主键
- 表2: Address
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
+-------------+---------+
AddressId 是上表主键
- 编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:
FirstName, LastName, City, State
一开始我想到的是select 做一次关联,表 Person中的PersonId如果和 Address中的PersonId如果相等就能够显示出来。
select p.FirstName,p.LastName,ad.City,ad.State
from Person p,Address ad
where p.PersonId=ad.PersonId
但是我提交之后发现这是错误的。我也看到很多人在评论区里面去问,没有回答,所以索性自己动手,建了一下表,对比标准答案。
发现我这种方式实际会过滤掉没有personid对应的结果,要想让左边的person全部都留下来要用left join.
select FirstName, LastName, City, State
from Person left join Address
on Person.PersonId = Address.PersonId