首页 > 解决方案 > 如何在 JOIN 中引用外部字段?

问题描述

这是我的架构: 在此处输入图像描述

我需要选择具有最优先电话和地址的所有用户。这是为特定用户(id=1)选择最优先电话的查询:

select ph.id, ph.number from VisitingCard vc
left join Phone ph on ph.card_id = vc.id
where vc.person_id = 1
order by priority desc
limit 1

以下是我尝试为所有用户获得优先级最高的手机:

select * from Person p
left join (
    select ph.id, ph.number from VisitingCard vc
    left join Phone ph on ph.card_id = vc.id
    where vc.person_id = p.id -- no such column: p.id
    order by priority desc
    limit 1
)

链接- SqlFiddle 与用户的架构和最优先的地址和电话(id = 1)

我如何为每个用户使用这样的查询,而不仅仅是对于 id=1 的用户?

标签: sqlsqlitejoin

解决方案


一种方法使用相关子查询:

select vc.person_id,
       (select ph.number
        from Phone ph 
        where ph.card_id = vc.id
        order by ph.priority desc
        limit 1
       ) as number
from VisitingCard vc;

推荐阅读