Avalados por :
Olá especialista,
[1]
Selecione tab1."BUKRS", tab1."AMT", tab2."AMT" de tab1 left join tab2
on tab1."BUKRS" = tab2."BUKRS";
O resultado é 1000 300 5000.
[2]
Mas, se o campo "ACCT", que é NULL , for adicionado à condição where, por exemplo,
Selecione tab1."BUKRS", tab1."AMT", tab2."AMT" de tab1 left join tab2
on tab1."BUKRS" = tab2."BUKRS" e tab1."ACCT" = tab2."ACCT ";
O resultado é 1000 300 NULL .
O valor de tab2."AMT"(5000) não é recuperado.
[3]
Então, minha pergunta é:
Campos que são NULL , não podem ser usados na condição where?
Obrigado.
image.png
Olá,
Considero que deveria ser normal, já que null = null não é uma expressão válida.
Alternativamente, você pode modificar sua consulta da seguinte forma se desejar que seja exibida no resultado quando ambos forem nulos.
select tab1."BUKRS", tab1."AMT", tab2."AMT" from tab1 left join tab2 on tab1."BUKRS" = tab2."BUKRS" and (tab1."ACCT" = tab2."ACCT" or (tab1."ACCT" IS NULL and tab2."ACCT" is NULL));
Saudações,
Eason Chen
Olá Wei,
cada comparação com NULL sempre resulta no valor lógico UNKNOWN . Mas em condições de JOIN assim como em condições de WHERE , você precisa do valor lógico TRUE para que um registro seja considerado.
Em uma condição de WHERE , o predicado IS NULL é útil. Tenha em mente que: x = NULL não funciona, pois é uma comparação com NULL . Utilize x IS NULL no lugar.
Em uma condição de JOIN , você pode mapear NULL para um valor válido (por exemplo, a string vazia '') com a função SQL IFNULL( ) :
select tab1."BUKRS",
tab1."AMT",
tab2."AMT"
from tab1
left join tab2
on tab1."BUKRS" = tab2."BUKRS"
and IFNULL(tab1."ACCT", '') = IFNULL(tab2."ACCT", '');<br>
Neste exemplo, tenha em mente que a string vazia também pode fazer parte dos seus dados. Nesse caso, escolha outro valor de substituição.
Atenciosamente,
Jörg
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute