oracle sql连接两个表

niwlg2el  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(349)

我有一个连接两个表的查询。

RESULT_TABLE:  
ID, TEST_RESULT , TEST_STATUS

EMAIL_TABLE:  
ID, EMAIL_TYPE, EMAIL_ADDRESS

结果表通常每个学生只有一个结果。一个学生在email\表中通常有两个email地址,一个是“personal”,另一个是“student”。
我需要一个查询,将学生的结果和两个电子邮件地址合并成一行。
我的查询使用电子邮件表的两个示例来执行此操作:

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\表中缺少一个email\类型,则找不到整个结果。我需要它为每个学生显示一个结果,即使一个或两个电子邮件地址不存在于email\表中。
什么是正确的方法来做这个连接?

w8ntj3qf

w8ntj3qf1#

学会使用恰当的、明确的、标准的、可读的语言 JOIN 语法!
你可以用两个 left join 学生:

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'

相关问题