MySQL если не NULL, то display 1, иначе display 0
Я работаю с небольшим усложнением отображения здесь. Я уверен, что есть возможность IF/ELSE, которую я просто пропускаю.
У меня есть 2 таблицы, которые я запрашиваю (клиенты, адреса). У первого есть основная запись, но у второго может быть или не быть записи для левого соединения.
Я хочу отобразить ноль, если в таблице адресов нет записи. И я хочу отобразить только 1, Если запись существует.
что я пытался так далеко:
SELECT c.name, COALESCE(a.addressid,0) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123
Это первый пример не делает этого. Но я, возможно, использую COALESCE неправильно.
Как я могу отобразить 0, если null, и 1, если что-то существует?
5 ответов:
вместо
COALESCE(a.addressid,0) AS addressexists
используйтеCASE
:CASE WHEN a.addressid IS NOT NULL THEN 1 ELSE 0 END AS addressexists
или проще:
(a.addressid IS NOT NULL) AS addressexists
это работает, потому что
TRUE
отображается как1
в MySQL иFALSE
как0
.
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
осторожно, если вы исходите из C / C++ и ожидаете, что это сработает:
select if(name, 1, 0) ..
даже если " имя " не равно NULL, в отличие от C, ложное условие все равно срабатывает, и приведенный выше оператор возвращает 0. Таким образом, вы должны помнить, чтобы явно проверить на NULL или пустую строку:
select if(name is null or name = '', 0, 1)
PS пример Евгения выше правильный, но я хотел уточнить этот нюанс, так как он застал меня врасплох.