使用两个不同的外键连接两个表以获得相同的字段

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

【讨论】:

以上是关于使用两个不同的外键连接两个表以获得相同的字段的主要内容,如果未能解决你的问题,请参考以下文章

数据库中的外键

使用不匹配的外键连接两个表时的空结果集

如何连接两个表以获得以下结果?

删除连接表的重复记录并修复相关表上的外键

将相同的外键添加到 4 行 Laravel

powerdesigner12的外键怎么设置和删除?