从联接中选择单行 Table
Selecting a Single Row from Joined Table
我有两个table,Person
和Address
,如下图:
人
地址
使用这些 table,我想为 Person
table 中的每个人创建一个视图,但只有最近的地址(即最大 address_id) 需要按如下所示提取(例如,Jane 的地址应在视图中设置为“20 Main St”):
使用下面的脚本,似乎 table 正在按预期加入,但我在 地址 字段中没有看到任何值。我尝试了同一个脚本的几种不同变体,但此时我的轮子几乎旋转了。
任何提示将不胜感激!
SELECT
p.person_id AS id,
p.first_name AS first_name,
p.last_name AS last_name,
a.address AS address
FROM Person p
LEFT JOIN Address a ON
a.address_id = (
SELECT MAX(address_id)
FROM Address
WHERE p.person_id = a.person_id
)
我已经测试了这个查询,它满足你的需要。
select p.id, p.name, a.address
from person p
left join address a
on p.id = a.person_id
and a.id = (select max(id) from address where person_id = p.id)
;
我有两个table,Person
和Address
,如下图:
人
地址
使用这些 table,我想为 Person
table 中的每个人创建一个视图,但只有最近的地址(即最大 address_id) 需要按如下所示提取(例如,Jane 的地址应在视图中设置为“20 Main St”):
使用下面的脚本,似乎 table 正在按预期加入,但我在 地址 字段中没有看到任何值。我尝试了同一个脚本的几种不同变体,但此时我的轮子几乎旋转了。
任何提示将不胜感激!
SELECT
p.person_id AS id,
p.first_name AS first_name,
p.last_name AS last_name,
a.address AS address
FROM Person p
LEFT JOIN Address a ON
a.address_id = (
SELECT MAX(address_id)
FROM Address
WHERE p.person_id = a.person_id
)
我已经测试了这个查询,它满足你的需要。
select p.id, p.name, a.address
from person p
left join address a
on p.id = a.person_id
and a.id = (select max(id) from address where person_id = p.id)
;