我是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
这是为什么?我认为这两个查询都会完成同样的事情并产生相同的效果。
答案 0 :(得分:3)
由于以下共鸣。
while - > where子句创建隐式内连接
答案 1 :(得分:1)
问题陈述
为提供以下信息的报告编写SQL查询 对于Person表中的每个人,无论是否有地址 对于每个人:
注意最后一部分说不管是否有地址。因此,如果您使用WHERE
子句,则不会获得不包含地址的条目的结果。另一方面,连接 左连接将组合两个表,尽管给定{{1} Address
表中是否有条目}}。