为什么在这种情况下我不能使用“where”而不是“left join on”?

时间:2015-04-28 17:22:15

标签: mysql

我是SQL新手。我正在练习关于leetcode的SQL问题。

这是一个问题:https://leetcode.com/problems/combine-two-tables/

为什么我不能使用:

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

在这种情况下失败了:

Input:
{"headers": {"Person": ["PersonId", "LastName", "FirstName"], "Address": ["AddressId", "PersonId", "City", "State"]}, "rows": {"Person": [[1, "Wang", "Allen"]], "Address": []}}
Output:
{"headers": ["FirstName", "LastName", "City", "State"], "values": []}
Expected:
{"headers": ["FirstName", "LastName", "City", "State"], "values": [["Allen", "Wang", null, null]]}

接受的答案是:

select Person.Firstname, Person.lastname, Address.city, Address.state
from Person
left join Address on Person.PersonId = Address.PersonId

这是为什么?我认为这两个查询都会完成同样的事情并产生相同的效果。

2 个答案:

答案 0 :(得分:3)

由于以下共鸣。

enter image description here

while - > where子句创建隐式内连接

enter image description here

答案 1 :(得分:1)

问题陈述

  

为提供以下信息的报告编写SQL查询   对于Person表中的每个人,无论是否有地址   对于每个人:

注意最后一部分说不管是否有地址。因此,如果您使用WHERE子句,则不会获得不包含地址的条目的结果。另一方面,连接 左连接将组合两个表,尽管给定{{1} Address表中是否有条目}}。