首页 > 解决方案 > 在简单的左外连接中使用第三个表

问题描述

我有一个简单的 sql 很好,但我需要来自另一个表的数据并在下面出现错误:诀窍是每个 people_id 可能有多个 program_name(我们是一个有很多程序的机构)我想显示全名,alt_id他们所在的信息和程序。我想显示程序,即使它们没有 alt_id。

select b.*, c.program_name, a.full_name 
from all_clients_view a 
left outer join alt_id_view b
on a.people_id = b.people_id

*** 到这里还好。这部分给出错误:

Where a.people_id IN (select program_name
                      from program_enrollment_view c
                      where a.people_id = c.people_id)

错误:

无法绑定多部分标识符“c.program_name”。

标签: sqlsql-server

解决方案


我怀疑你只是想要exists

where exists (select 1
              from program_enrollment_view pev
              where a.people_id = pev.people_id
             )

将“people_id”与“program_name”进行比较对我来说没有意义。

如果要返回程序名称,则需要附加join

select ac.full_name, ai.*, pev.program_name, 
from all_clients_view ac left join
     alt_id_view ai
     on ac.people_id = ai.people_id left join
     program_enrollment_view pev
     on ac.people_id = pev.people_id;

笔记:

  • 这使用有意义的表别名,而不是a,bc. 强烈推荐!
  • 如果您想要没有匹配的行,您想要查看left joinprogram_enrollment_view
  • 因为您是*从第二张表中选择的,所以我猜 aninner join更合适。

推荐阅读