繁体   English   中英

如何将一个表与两个表连接在一起?

[英]How to join a same table with two tables?

我想创建一个Oracle数据库的视图:

create or replace force view view_ind_pta (indi_code, nat_indi_code, indi_unite, indi_symbole, indi_lib, indi_cible, pta_intitule, indi_resp, 
indi_source_info, user_code, peri_mes_code, peri_mes_lib, pta_parent, deleted,obj_intitule,pta_action) 
as 
select distinct
i.indi_code,
i.nat_indi_code,
i.indi_unite,
i.indi_symbole,
to_char(i.indi_lib) as indi_lib,
i.indi_cible,
concat(concat(to_char(a.pta_ref),' - '),to_char(a.pta_intitule)) as pta_intitule,
i.indi_resp,
to_char(i.indi_source_info) as indi_source_info,
u.user_code,
i.peri_mes_code , 
pm.peri_mes_lib ,
concat(concat(to_char(p.pta_ref),' - '),to_char(p.pta_intitule)) as pta_parent,
i.deleted ,
to_char(o.obj_intitule) as obj_intitule,
concat(concat(to_char(action.pta_ref),' - '),to_char(action.pta_intitule)) as pta_action
from
indicateur i
left join acteur_saisie_indicateur ai on ai.indi_code = i.indi_code
left join acteur_verif_indicateur avi on avi.indi_code = i.indi_code
left join utilisateur u on ( ai.user_code = u.user_code and avi.user_code = u.user_code) 
left join objectif o on i.obj_code = o.obj_code
left join pta a on o.pta_code = a.pta_code
left join pta action on a.pta_pta_code = action.pta_code
left join pta p on action.pta_pta_code = p.pta_code 
left join periodicite_mesure pm on pm.peri_mes_code = i.peri_mes_code
where p.pta_definitif = 3;

该视图中有一个表utilisateur ,我想将其与两个表acteur_saisie_indicateuracteur_verif_indicateur结合使用 我尝试了and运算符,但我认为这不是一个好主意,因为仅当两个表中都有连接的行时,查询才会返回行! 尽管这不是必需的:即使仅一个表具有联接的行,我也希望查询返回行。 那么如何联接这三个表呢?

您需要两次加入表:

left join acteur_saisie_indicateur ai on ai.indi_code = i.indi_code
left join acteur_verif_indicateur avi on avi.indi_code = i.indi_code
left join utilisateur u on ai.user_code = u.user_code 
left join utilisateur u2 on avi.user_code = u2.user_code

我们可以在FROM子句中多次包含同一个表。 我们需要做的就是使用不同的别名来区分实例:

left join utilisateur uai 
    on ai.user_code = uai.user_code
left join utilisateur uavi 
    on avi.user_code = uavi.user_code

你需要做的另一件事是在视图的投影句柄表中的列。 您希望显示utilisateur值,而不管该值来自哪个实例,例如,使用nvl()或行业标准的coalesce()

coalesce(uai.user_code, uavi.user_code) as user_code

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM