在简单的左外部联接中使用第三个表

时间:2019-05-08 14:07:42

标签: sql sql-server

我有一个简单的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”。

1 个答案:

答案 0 :(得分:1)

我怀疑您只是想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;

注意:

  • 这使用有意义的表别名,而不是abc。强烈推荐!
  • 如果您想要不匹配的行,则要left join视图program_enrollment_view
  • 因为您要从第二个表中选择*,所以我猜想inner join更合适。