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
谢谢,这是我需要的。谢谢,这是我需要的。