Sql 显示左联接之一的列值

Sql 显示左联接之一的列值,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,在这个查询中,如果MFT或MFA模式中存在SAL.ID\u AMENAZA,则显示一行,但我想在结果行中显示MFT.ID\u AMENAZA或MFA.ID\u AMENAZA(如果存在于任何表中) 在我的实际查询中,我不需要ID_AMENAZA。我怎样才能展示 SELECT SAL.ID_SALVAGUARDA, SAL.DESCRIPCION, SAL.EFICACIA FROM AGR_SALVAGUARDAS SAL LEFT JOIN AGR_MIT_FREC_TIPO MF

在这个查询中,如果
MFT
MFA
模式中存在
SAL.ID\u AMENAZA
,则显示一行,但我想在结果行中显示
MFT.ID\u AMENAZA
MFA.ID\u AMENAZA
(如果存在于任何表中)

在我的实际查询中,我不需要ID_AMENAZA。我怎样才能展示

SELECT SAL.ID_SALVAGUARDA, SAL.DESCRIPCION, SAL.EFICACIA
FROM AGR_SALVAGUARDAS SAL 
     LEFT JOIN AGR_MIT_FREC_TIPO MFT
     ON SAL.ID_SALVAGUARDA = MFT.ID_SALVAGUARDA AND MFT.ID_AMENAZA = 5043 
     LEFT JOIN AGR_MIT_FREC_ACT MFA
     ON SAL.ID_SALVAGUARDA = MFA.ID_SALVAGUARDA AND MFA.ID_AMENAZA = 5043   
WHERE MFT.ID_SALVAGUARDA IS NOT NULL OR
      MFA.ID_SALVAGUARDA IS NOT NULL
GROUP BY SAL.ID_SALVAGUARDA, SAL.DESCRIPCION, SAL.EFICACIA
我需要得到这样一张表:

ID_SALVAGUARDA | DESCRIPCION | EFICACIA | ID_AMENAZA
5061           | PRE-01      | 100      | 5043

提前感谢您。

这应该适合您:

SELECT SAL.ID_SALVAGUARDA, SAL.DESCRIPCION, SAL.EFICACIA, 5043 as ID_AMENAZA
FROM AGR_SALVAGUARDAS SAL 
     LEFT JOIN AGR_MIT_FREC_TIPO MFT
     ON SAL.ID_SALVAGUARDA = MFT.ID_SALVAGUARDA AND MFT.ID_AMENAZA = 5043 
     LEFT JOIN AGR_MIT_FREC_ACT MFA
     ON SAL.ID_SALVAGUARDA = MFA.ID_SALVAGUARDA AND MFA.ID_AMENAZA = 5043   
WHERE MFT.ID_SALVAGUARDA IS NOT NULL OR
      MFA.ID_SALVAGUARDA IS NOT NULL
GROUP BY SAL.ID_SALVAGUARDA, SAL.DESCRIPCION, SAL.EFICACIA;
因为您的查询保证至少有一个匹配项

然而,更普遍的解决方案是:

SELECT SAL.ID_SALVAGUARDA, SAL.DESCRIPCION, SAL.EFICACIA,
       cOALESCE(MFT.ID_AMENAZA, MFA.ID_AMENAZA) as ID_AMENAZA
. . .

函数
COALESCE()
返回其参数列表中第一个非
NULL的值。

这应该适用于您:

SELECT SAL.ID_SALVAGUARDA, SAL.DESCRIPCION, SAL.EFICACIA, 5043 as ID_AMENAZA
FROM AGR_SALVAGUARDAS SAL 
     LEFT JOIN AGR_MIT_FREC_TIPO MFT
     ON SAL.ID_SALVAGUARDA = MFT.ID_SALVAGUARDA AND MFT.ID_AMENAZA = 5043 
     LEFT JOIN AGR_MIT_FREC_ACT MFA
     ON SAL.ID_SALVAGUARDA = MFA.ID_SALVAGUARDA AND MFA.ID_AMENAZA = 5043   
WHERE MFT.ID_SALVAGUARDA IS NOT NULL OR
      MFA.ID_SALVAGUARDA IS NOT NULL
GROUP BY SAL.ID_SALVAGUARDA, SAL.DESCRIPCION, SAL.EFICACIA;
因为您的查询保证至少有一个匹配项

然而,更普遍的解决方案是:

SELECT SAL.ID_SALVAGUARDA, SAL.DESCRIPCION, SAL.EFICACIA,
       cOALESCE(MFT.ID_AMENAZA, MFA.ID_AMENAZA) as ID_AMENAZA
. . .

函数
COALESCE()
返回其参数列表中第一个非
NULL
的值。

您可以
COALESCE

SELECT 
  SAL.ID_SALVAGUARDA, 
  SAL.DESCRIPCION, 
  SAL.EFICACIA, 
  COALESCE( MFT.ID_AMENAZA, MFA.ID_AMENAZA) as ID_AMENAZA

这将返回第一个不为空的ID。

您可以为此合并

SELECT 
  SAL.ID_SALVAGUARDA, 
  SAL.DESCRIPCION, 
  SAL.EFICACIA, 
  COALESCE( MFT.ID_AMENAZA, MFA.ID_AMENAZA) as ID_AMENAZA

这将返回第一个不为空的ID。

谢谢,最后我使用了我为此修改的
groupby中的Coalesce an:
groupby SAL.ID\u SALVAGUARDA,SAL.DENOMINACION,SAL.description,SAL.EFICACIA,MFT.ID\u AMENAZA,MFA.ID\u AMENAZA
谢谢,最后,我在
组中使用了Coalesce an BY
我对此进行了修改:
组由SAL.ID_SALVAGUARDA、SAL.DENOMINACION、SAL.DESCRIPCION、SAL.EFICACIA、MFT.ID_AMENAZA、MFA.ID_AMENAZA
谢谢,这是我需要的。谢谢,这是我需要的。