MySQL IF NOT NULL, затем отображать 1, иначе отображать 0 - PullRequest
94 голосов
/ 22 февраля 2012

Я работаю с небольшой сложностью отображения здесь. Я уверен, что есть возможность 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, если ноль, и 1, если что-то существует?

Ответы [ 6 ]

187 голосов
/ 22 февраля 2012

Вместо 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.

84 голосов
/ 22 февраля 2012
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
16 голосов
/ 04 марта 2014

Осторожно, если вы пришли из C / C ++ и ожидаете, что это сработает:

select if(name, 1, 0) ..

Даже если 'name' не равно NULL, в отличие от C, ложное условие все еще срабатывает, и приведенный выше оператор возвращает 0. Таким образом, вы должны помнить, чтобы явно проверять NULL или пустую строку:

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

PS Приведенный выше пример Евгения верен , но я хотел уточнить этот нюанс, поскольку он застал меня врасплох.

13 голосов
/ 22 февраля 2012
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 голосов
/ 02 мая 2016

Другой метод без WHERE, попробуйте это ..

Выберет как пустые, так и значения NULL

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

Он установит ноль, если это пустая строка, тогда будет истинным для этоготакже.

0 голосов
/ 25 февраля 2019

Если в TSQL, вы можете попробовать:

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

SQL Server должен работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...