sql - 在简单的左外连接中使用第三个表
问题描述
我有一个简单的 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”。
解决方案
我怀疑你只是想要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
,b
和c
. 强烈推荐! - 如果您想要没有匹配的行,您想要查看
left join
。program_enrollment_view
- 因为您是
*
从第二张表中选择的,所以我猜 aninner join
更合适。
推荐阅读
- powershell - Powershell 管道处理 - $_ 有效,但 $ParamName 无效
- java - 给定一个数字和一个数组,找出总和等于给定数字的所有可能组合
- javascript - 如何从对象数组中提取对象(数组)?
- html - 打印时关闭其他 CSS 表格
- python - neo4j 的 Python 加载脚本返回 ValueError
- ios - 打开App2后如何关闭App1?
- python - 在 pyplot 中绘图时出现奇怪的字符
- angular - 根据响应正文更改有效负载
- multithreading - Visual Studio:线程等待的 AutoReset 事件能否用于非线程方法(例如在 Button1 中)?
- javascript - 实例化 select2 组合框时出现 JavaScript 运行时错误