如果SAL.ID_AMENAZA
或MFT
架构中存在MFA
,则此查询会显示一行,但我想显示MFT.ID_AMENAZA
或MFA.ID_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
提前谢谢。
答案 0 :(得分:3)
这应该适合你:
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
的值。
答案 1 :(得分:1)
您可coalesce
为此。
SELECT
SAL.ID_SALVAGUARDA,
SAL.DESCRIPCION,
SAL.EFICACIA,
COALESCE( MFT.ID_AMENAZA, MFA.ID_AMENAZA) as ID_AMENAZA
这将返回非空的第一个ID。