力扣 175. 组合两个表

题目说明

SQL架构

1
2
3
4
5
6
7
8
Create table If Not Exists Person (personId int, firstName varchar(255), lastName varchar(255))
Create table If Not Exists Address (addressId int, personId int, city varchar(255), state varchar(255))
Truncate table Person
insert into Person (personId, lastName, firstName) values ('1', 'Wang', 'Allen')
insert into Person (personId, lastName, firstName) values ('2', 'Alice', 'Bob')
Truncate table Address
insert into Address (addressId, personId, city, state) values ('1', '2', 'New York City', 'New York')
insert into Address (addressId, personId, city, state) values ('2', '3', 'Leetcode', 'California')
  • 表1: Person

    1
    2
    3
    4
    5
    6
    7
    8
    +-------------+---------+
    | 列名 | 类型 |
    +-------------+---------+
    | PersonId | int |
    | FirstName | varchar |
    | LastName | varchar |
    +-------------+---------+
    PersonId 是上表主键
  • 表2: Address

    1
    2
    3
    4
    5
    6
    7
    8
    9
    +-------------+---------+
    | 列名 | 类型 |
    +-------------+---------+
    | AddressId | int |
    | PersonId | int |
    | City | varchar |
    | State | varchar |
    +-------------+---------+
    AddressId 是上表主键

    编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:

1
FirstName, LastName, City, State

笔者理解

此题是一道SQL算法问题,在力扣题库中被定义为简单题。

实现

1
2
3
4
5
6
7
8
# Write your MySQL query statement below

select FirstName, LastName, City, State
# 题目要求:"无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息"
# 所以在此处选择 Person 表左连接 Address 表,保证将所有 Person 表的数据都查询出来
from Person left join Address
# 两表连接数据的筛选条件
on Person.PersonId = Address.PersonId

时间和空间效率还行,可见此解法还比较适合此题。

image-20211228113055962

总结

本题是今天的一题,难度是为简单,感兴趣的朋友都可以去尝试一下,此题还有其他更多的解法,朋友们可以自己逐一尝试。