LeetCode题解-175.combine-two-tables

175.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
分析
因为表 Address 中的 personId 是表 Person 的外关键字,所以我们可以连接这两个表来获取一个人的地址信息。
考虑到可能不是每个人都有地址信息,我们应该使用 outer join 而不是默认的 inner join。
题解(mysql):
以下这种解法是错误的!
原因是题目要求:无论 person 是否有地址信息,都需要基于上述两表提供 person 的相关信息

select FirstName,LastName,City,State from Person, Address where Address.PersonId = Person.PersonId

下面才是正解:

select FirstName,LastName,City,State from Person left join Address on Address.PersonId = Person.PersonId

左外连接和右外连接

  • 左外连接,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
  • 与左外连接相反,右外连接,左表只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。
    那么上题当然也可以用右外连接来求解
select FirstName,LastName,City,State from Address right join Person on Address.PersonId = Person.PersonId

总结:在进行求解时,要看清题目要求,合理进行求解。

全部评论

相关推荐

码农索隆:以下是我以我微薄的认知提供的建议: 1.考个教师资格证,去当体育考试。 2.去健身房当健身教练(因为在我印象里面体育生身材都不错)。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务