MySQL SE NON NULLO, quindi visualizza 1, altrimenti visualizza 0


105

Sto lavorando con una piccola complicazione di visualizzazione qui. Sono sicuro che ci sia una capacità IF / ELSE che sto solo trascurando.

Ho 2 tabelle che sto interrogando (clienti, indirizzi). Il primo ha il record principale, ma il secondo può o non può avere un record a cui UNIRE LEFT.

Voglio visualizzare uno zero se non ci sono record nella tabella degli indirizzi. E voglio visualizzare solo 1, se esiste un record.

Quello che ho tentato finora:

SELECT c.name, COALESCE(a.addressid,0) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123

Questo primo esempio non lo fa. Ma forse sto utilizzando COALESCE in modo sbagliato.

Come posso visualizzare uno 0, se nullo, e un 1, se esiste qualcosa?


possibile duplicato di Conditional NOT NULL case SQL
nawfal

Risposte:


211

Invece di COALESCE(a.addressid,0) AS addressexists, usa CASE:

CASE WHEN a.addressid IS NOT NULL 
       THEN 1
       ELSE 0
END AS addressexists

o il più semplice:

(a.addressid IS NOT NULL) AS addressexists

Funziona perché TRUEviene visualizzato come 1in MySQL e FALSEcome 0.


96
SELECT c.name, IF(a.addressid IS NULL,0,1) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123

17

Fai attenzione se vieni da C / C ++ e ti aspetti che funzioni:

select if(name, 1, 0) ..

Anche se 'nome' non è NULL, a differenza di C, si attiva ancora una condizione falsa e l'istruzione sopra restituisce 0. Quindi, devi ricordarti di controllare esplicitamente NULL o una stringa vuota:

 select if(name is null or name = '', 0, 1)

PS L'esempio di Eugen sopra è corretto , ma volevo chiarire questa sfumatura poiché mi ha colto di sorpresa.


16
SELECT 
    c.name, 
    CASE WHEN a.addressid IS NULL THEN 0 ELSE 1 END AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123

2

Un altro metodo senza DOVE, prova questo ..

Selezionerà entrambi i valori Empty e NULL

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename

Imposterà null se è una stringa vuota, quindi sarà vero anche su quella.


Utile anche: selezionare IFNULL (fieldname, "1") da tablename;
PodTech.io

1

Puoi effettivamente utilizzare un'istruzione IF nelle ultime versioni di MySQL.

IF(expr,if_true_expr,if_false_expr)

IE:

SELECT name, IF(ISNULL(name), 'robot', 'human') AS type
FROM visitors

0

Se all'interno di TSQL, puoi provare:

SELECT IIF(a.addressid IS NULL, 0, 1) AS addressexists

SQL Server dovrebbe funzionare

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.