使用两个不同的外键连接两个表以获得相同的字段
Posted
技术标签:
【中文标题】使用两个不同的外键连接两个表以获得相同的字段【英文标题】:Join two table with two different Foreign Key for get same field 【发布时间】:2020-09-18 09:01:36 【问题描述】:在我的 Oracle/Sql 练习中,我有 2 个表 D_REL_ENTI_FABBRICATI 和 D_ENTI:
D_REL_ENTI_FABBRICATI 有 2 个 FK:FK_ENTI 和 FK_ENTE_PROPRIETARIO 以及我想要获得的 2 个字段:Denominazione 和 Codice_Fiscale。 D_ENTI 具有唯一的主键:SEQU_ENTE。
现在我要选择 D_REL_ENTI_FABBRICATI 的所有记录,包含 4 个字段:
Amm_Dich_Denom:当 D_REL_ENTI_FABBRICATI.FK_ENTI=D_ENTI.SEQU_ENTE 时得到 Denominazione;
Amm_Dich_CF:当 D_REL_ENTI_FABBRICATI.FK_ENTI=D_ENTI.SEQU_ENTE 时得到 Codice_Fiscale;
Ente_Prop_Denom:当 D_REL_ENTI_FABBRICATI.FK_ENTE_PROPRIETARIO=D_ENTI.SEQU_ENTE 时获取 Denominazione;
Ente_Prop_CF:当 D_REL_ENTI_FABBRICATI.FK_ENTE_PROPRIETARIO=D_ENTI.SEQU_ENTE 时获取 Codice_Fiscale;
我的解决方案是这样的:
select
D.FK_ENTE,
D.FK_ENTE_PROPRIETARIO,
(select D_ENTI.DESC_DENOMINAZIONE from D_ENTI where D.FK_ENTE=D_ENTI.SEQU_ENTE) AMM_DICH_DENOM,
(select D_ENTI.CODI_CODICE_FISCALE from D_ENTI where D.FK_ENTE=D_ENTI.SEQU_ENTE) AMM_DICH_CF,
(select D_ENTI.DESC_DENOMINAZIONE from D_ENTI where D.FK_ENTE_PROPRIETARIO=D_ENTI.SEQU_ENTE) ENTE_PROPR_DENOM,
(select D_ENTI.CODI_CODICE_FISCALE from D_ENTI where D.FK_ENTE_PROPRIETARIO=D_ENTI.SEQU_ENTE) ENTE_PROPR_CF
from
D_REL_ENTI_FABBRICATI D
但是还有另一种更优雅、更贴切的方法吗?
谢谢大家 问候
【问题讨论】:
【参考方案1】:这是你要找的吗?
SELECT
d.fk_ente,
d.fk_ente_proprietario,
de.desc_denominazione amm_dich_denom,
de.codi_codice_fiscale amm_dich_cf,
dep.desc_denominazione ente_propr_denom,
dep.codi_codice_fiscale ente_propr_cf
FROM
d_rel_enti_fabbricati d
LEFT OUTER JOIN d_enti de ON d.fk_ente = de.sequ_ente
LEFT OUTER JOIN d_enti dep ON d.fk_ente_proprietario = dep.sequ_ente
如果您始终在 d.fk_ente 和 d.fk_ente_proprietario 中有值,您可以将 LEFT OUTER JOIN
替换为 JOIN
【讨论】:
以上是关于使用两个不同的外键连接两个表以获得相同的字段的主要内容,如果未能解决你的问题,请参考以下文章