Estou trabalhando com uma pequena complicação de exibição aqui. Tenho certeza de que há um recurso IF / ELSE que estou apenas esquecendo.
Tenho 2 tabelas que estou consultando (clientes, endereços). O primeiro tem o registro principal, mas o segundo pode ou não ter um registro para LEFT JOIN.
Desejo exibir um zero se não houver registro na tabela de endereços. E eu quero exibir apenas 1, se houver um registro.
O que tentei até agora:
SELECT c.name, COALESCE(a.addressid,0) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123
Este primeiro exemplo não faz isso. Mas posso estar utilizando o COALESCE errado.
Como posso exibir um 0, se nulo, e um 1, se houver algo?
mysql
if-statement
coffeemonitor
fonte
fonte
Respostas:
Em vez de
COALESCE(a.addressid,0) AS addressexists
, useCASE
:ou o mais simples:
Isso funciona porque
TRUE
é exibido como1
no MySQL eFALSE
como0
.fonte
fonte
Cuidado se você está vindo de C / C ++ e espera que isso funcione:
Mesmo se 'nome' não for NULL, ao contrário de C, uma condição falsa ainda é acionada e a instrução acima retorna 0. Assim, você deve se lembrar de verificar explicitamente se há NULL ou string vazia:
PS O exemplo de Eugen acima está correto , mas eu queria esclarecer essa nuance, pois me pegou de surpresa.
fonte
fonte
Outro método sem WHERE, tente este ..
Selecionará os valores Vazio e NULL
Ele será definido como nulo se for uma string vazia, então também será verdadeiro.
fonte
Na verdade, você pode usar uma instrução IF nas versões mais recentes do MySQL.
IE:
fonte
Se estiver no TSQL, você pode tentar:
SQL Server deve funcionar
fonte