47 - 组合两个表
题目
SQL架构
Create table Person (PersonId int, FirstName varchar(255), LastName varchar(255))
-- 建表
Create table Address (AddressId int, PersonId int, City varchar(255), State varchar(255))
Truncate table Person
-- 清空Person所有数据
insert into Person (PersonId, LastName, FirstName) values ('1', 'Wang', 'Allen')
Truncate table Address
insert into Address (AddressId, PersonId, City, State) values ('1', '2', 'New York City', 'New York')
表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
解答
惊呆了要我写sql,leetcode咋知道我刚开始学sql呢?
select FirstName, LastName, City, State
from Person left join `Address`
on Person.PersonId = `Address`.`PersonId`
Runtime: 214 ms, faster than 79.29% of MySQL online submissions forCombine Two Tables.
Memory Usage: N/A
大概意思是,做一张新表,里面包括了FirstName, LastName, City, State
这四个列。
数据从Person
和Address
里面取,Person
的数据都要保留,对应的列如果Address
没有就让它为null
。
两表数据根据PersonId
来匹配
select的列表名,如果加了括号就会报错,似乎是被当成了一列。
Last updated
Was this helpful?