Pracuję tutaj z małą komplikacją wyświetlania. Jestem pewien, że istnieje możliwość IF / ELSE, którą po prostu przeoczam.
Mam 2 tabele, które odpytuję (klienci, adresy). Pierwsza ma główny rekord, ale druga może, ale nie musi, zawierać rekord LEFT JOIN do.
Chcę wyświetlić zero, jeśli w tabeli adresów nie ma rekordu. Chcę wyświetlić tylko 1, jeśli istnieje rekord.
Co próbowałem 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 tego nie robi. Ale być może źle wykorzystuję COALESCE.
Jak mogę wyświetlić 0, jeśli null, i 1, jeśli coś istnieje?
mysql
if-statement
coffeemonitor
źródło
źródło
Odpowiedzi:
Zamiast
COALESCE(a.addressid,0) AS addressexists
używaćCASE
:lub prostsze:
To działa, ponieważ
TRUE
jest wyświetlany jako1
MySQL iFALSE
jako0
.źródło
źródło
Ostrożnie, jeśli pochodzisz z C / C ++ i oczekujesz, że to zadziała:
Nawet jeśli 'name' nie ma wartości NULL, w przeciwieństwie do C, warunek fałszywy nadal wyzwala, a powyższa instrukcja zwraca 0. W związku z tym musisz pamiętać, aby jawnie sprawdzić NULL lub pusty ciąg:
Powyższy przykład PS Eugena jest poprawny , ale chciałem wyjaśnić ten niuans, ponieważ zaskoczył mnie.
źródło
źródło
Inna metoda bez GDZIE, spróbuj tego ...
Wybierze wartości puste i NULL
Ustawi null, jeśli jest to pusty ciąg, a następnie będzie również prawdziwy.
źródło
W rzeczywistości możesz użyć instrukcji IF w najnowszych wersjach MySQL.
TO ZNACZY:
źródło
Jeśli w ramach TSQL, możesz spróbować:
SQL Server powinien działać
źródło