Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
表: Person
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
+-------------+---------+
personId是该表的主键列。
该表包含一些人的ID和他们的姓和名的信息。
表: Address
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
+-------------+---------+
addressId是该表的主键列。
该表的每一行都包含一个ID = PersonId的人的城市和州的信息。
编写一个SQL查询来报告 Person 表中每个人的姓、名、城市和状态。如果 personId 的地址不在 Address 表中,则报告为空 null 。
以 任意顺序 返回结果表。
查询结果格式如下所示。
示例 1:
输入:
Person表:
+----------+----------+-----------+
| personId | lastName | firstName |
+----------+----------+-----------+
| 1 | Wang | Allen |
| 2 | Alice | Bob |
+----------+----------+-----------+
Address表:
+-----------+----------+---------------+------------+
| addressId | personId | city | state |
+-----------+----------+---------------+------------+
| 1 | 2 | New York City | New York |
| 2 | 3 | Leetcode | California |
+-----------+----------+---------------+------------+
输出:
+-----------+----------+---------------+----------+
| firstName | lastName | city | state |
+-----------+----------+---------------+----------+
| Allen | Wang | Null | Null |
| Bob | Alice | New York City | New York |
+-----------+----------+---------------+----------+
解释:
地址表中没有 personId = 1 的地址,所以它们的城市和州返回null。
addressId = 1 包含了 personId = 2 的地址信息。
二、思路分析:
通过输出结果看到,输出Person和Address两个表中的数据,Person表中有记录,输出有,否则输出无,Address表中没有记录,输出中有对应的记录,返回的值为null,我们可以使用联表查询,以Person为主表,进行left join左外关联进行查询操作。
三、AC 代码:
使用联表查询SQL如下:
select a.firstName, a.lastName, b.city, b.state from Person a left join Address b on
a.PersonId = b.PersonId
四、总结:
执行结果:
通过
显示详情
添加备注
执行用时:485 ms, 在所有 MySQL 提交中击败了20.84%的用户
内存消耗:0 B, 在所有 MySQL 提交中击败了100.00%的用户
通过测试用例:8 / 8