2012-02-22 9 views
73

Pracuję z małą komplikacją wyświetlania tutaj. Jestem pewien, że istnieje zdolność IF/ELSE, którą właśnie przeoczyłem.MySQL JEŚLI NIE NULL, następnie wyświetl 1, a następnie wyświetl 0

Mam 2 tabele, których szukam (klienci, adresy). Pierwszy ma główny rekord, ale drugi może lub nie może mieć rekordu, aby LEFT JOIN to.

Chcę wyświetlić zero, jeśli w tabeli adresów nie ma rekordu. I chcę wyświetlić tylko 1, jeśli rekord istnieje.

Co mam próbowano do tej pory:

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

Ten pierwszy przykład nie robić. Ale mogę źle wykorzystywać COALESCE.

Jak wyświetlić 0, jeśli null i 1, jeśli coś istnieje?

+0

możliwy duplikat [warunkowego NOT NULL case SQL] (http://stackoverflow.com/questions/4821031/conditional-not-null-case-sql) – nawfal

Odpowiedz

154

Zamiast COALESCE(a.addressid,0) AS addressexists użyć CASE:

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

lub prostsze:

(a.addressid IS NOT NULL) AS addressexists 

To działa, ponieważ TRUE jest wyświetlany jako 1 w MySQL i FALSE jako 0.

+19

+1 dla (a.addressid NIE JEST NULL) AS addressexists – Simon

+0

perfect, thanks – Vignesh

+0

dzięki temu uratowało mi życie! –

12
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 
72
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 
14

ostrożny, jeśli idziesz z C/C++ i spodziewa się to do pracy:

select if(name, 1, 0) .. 

Nawet jeśli 'name' nie jest NULL, w przeciwieństwie do C, fałszywie warunku nadal wyzwala i powyższe stwierdzenie zwraca 0. w ten sposób, trzeba pamiętać, aby jednoznacznie sprawdzić null lub pusty ciąg:

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

PS Eugen's example up above is correct, ale chciałem wyjaśnić ten niuans, ponieważ zaskoczyło mnie to.

1

Inną metodą bez GDZIE, spróbuj tego ..

Czy wybrać zarówno Puste i NULL wartości

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

będzie ustawiony null, jeśli jest pusty ciąg znaków, a następnie być prawdą na tym również.

+0

Również użyteczne: wybierz IFNULL (nazwa pola, "1") z tablename; – Hariboo

Powiązane problemy