SQL选择-如果为空则如何从其他表中选择

时间:2018-09-13 22:55:00

标签: sql tsql

我有一个视图,该视图为b.emissor和B.indexador列返回一些空值。如果为空,则需要首先在表TB_CAD_RF中找到该值;如果仍然为空,则需要查询TB_CAD_RF_2。 我尝试以下逻辑,但不起作用。还尝试用案例陈述来思考问题,但无法弄清楚。

有人可以帮助我吗?

select A.NM_ATIVO, B.EMISSOR, B.INDEXADOR from VW_POSICAO as A
LEFT JOIN
TB_CAD_RF B on A.NM_ATIVO = B.CODIGO
where a.NM_EMISSOR is null
as C LEFT JOIN (
select C.EMISSOR, C.INDEXADOR from TB_CAD_RF_2 as D ON B.NM_ATIVO = C.CODIGO where C.EMISSOR is null)

3 个答案:

答案 0 :(得分:4)

此模式:

SELECT
  COALESCE( first.choice, second.choice, third.choice) as a
FROM
  first
  LEFT JOIN second on first.id = second.id
  LEFT JOIN third on second.id = third.id

Coalesce返回传入的第一个非null,从左向右扫描

答案 1 :(得分:3)

这是一种方法。始终将两者结合在一起,并按期望的结果合并字段。

select A.NM_ATIVO, 
    EMISSOR = COALESCE(A.EMISSOR,B.EMISSOR), 
    INDEXADOR=COALESCE(A.INDEXADOR,B.INDEXADOR)
from VW_POSICAO  A
LEFT JOIN TB_CAD_RF B on A.NM_ATIVO = B.CODIGO
LEFT JOIN TB_CAD_RF_2 D ON A.NM_ATIVO =D.CODIGO

答案 2 :(得分:1)

在ISNULL((从table1选择*),(从table2选择*))否则选择...的情况下

ISNULL类似于IIF语句,但是如果查询字段返回空值,它将尝试替代查询,或者您可以设置替代值。

语法可能有点不正确,有一段时间没有写此查询了,但是它应该使您走上正确的道路。 Google SQL ISNULL