首页 > 解决方案 > 从连接表中选择单行

问题描述

我有两个表,PersonAddress,如下图:

在此处输入图像描述

地址

在此处输入图像描述

使用这些表,我想为Person表中的每个人创建一个视图,但只需要提取最近的地址(即 max address_id),如下所示(例如,Jane 的地址应设置为'视图中的 20 Main St'):

在此处输入图像描述

使用下面的脚本,表格似乎按预期加入,但我在地址字段中看不到任何值。我尝试了同一脚本的几种不同变体,但此时我几乎在旋转我的轮子。

任何提示将不胜感激!

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
  )

标签: mysqlleft-join

解决方案


我已经测试了这个查询,它满足你的需要。

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)
;

推荐阅读