Oracle Sql 连接两个表
Posted
技术标签:
【中文标题】Oracle Sql 连接两个表【英文标题】:Oracle Sql join two tables 【发布时间】:2020-05-23 19:34:32 【问题描述】:我有一个连接两个表的查询。
RESULT_TABLE:
ID, TEST_RESULT , TEST_STATUS
EMAIL_TABLE:
ID, EMAIL_TYPE, EMAIL_ADDRESS
RESULT_TABLE 通常每个学生只有一个结果。学生通常在 EMAIL_TABLE 中有两个电子邮件地址,一个是“个人”类型,一个是“学生”类型。 我需要一个查询,将学生的结果和两个电子邮件地址连接成一行。
我的查询使用 EMAIL_TABLE 的两个实例来执行此操作:
select r.id, r.result, e1.email_address "PERSONAL", e2.email_address "STUDENT"
from result_table r, email_table e1, email_table e2
where r.test_status = 'graded'
and e1.id = r.id
and e2.id = r.id
and e1.email_type ='Personal'
and e2.email_type = 'Student'
示例结果:
ID RESULT PERSONAL STUDENT
------- -------- --------------------------- -------------------------
12345 A me@personalemail.com ima@studentemail.edu
12222 B number2@anotheremail.com youra@studentemail.edu
此查询在大多数情况下都有效,可显示学生的结果和两种类型的电子邮件地址。
问题是,如果 email_table 中缺少其中一个 email_types,则找不到整个结果。即使 email_table 中不存在一个或两个电子邮件地址,我也需要它为每个学生显示结果。
进行此连接的正确方法是什么?
【问题讨论】:
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出您可以给出的最少代码,即您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。隔离第一个错误的子表达式及其输入和输出。 (调试基础。) 这是一个常见问题解答。在考虑发布之前,请阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:***.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。 【参考方案1】:学习使用正确、明确、标准、可读的JOIN
语法!
你可以使用两个left join
s:
select r.id, r.result, ep.email_address as personal, e2.email_address as student
from result_table r left join
email_table ep
on ep.id = r.id and ep.email_type ='Personal' left join
email_table et2
on es.id = r.id and es.email_type = 'Student'
【讨论】:
以上是关于Oracle Sql 连接两个表的主要内容,如果未能解决你的问题,请参考以下文章