MySQL IF NOT NULL, затем отобразить 1, иначе отобразить 0

105

Здесь я работаю с небольшой сложностью отображения. Я уверен, что есть возможность IF / ELSE, которую я просто упускаю из виду.

У меня есть 2 таблицы, которые я запрашиваю (клиенты, адреса). Первая имеет основную запись, но вторая может иметь или не иметь запись, к которой нужно LEFT JOIN.

Я хочу отображать ноль, если в таблице адресов нет записи. И я хочу отображать только 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

В первом примере этого не происходит. Но я могу неправильно использовать КОАЛЕС.

Как я могу отобразить 0, если ноль, и 1, если что-то существует?

кофемонитор
источник
возможный дубликат SQL с
условным

Ответы:

212

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

ypercubeᵀᴹ
источник
97
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

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

select if(name, 1, 0) ..

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

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

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

Славомир
источник
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

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

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

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

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

PodTech.io
источник
Также полезно: выберите IFNULL (имя поля, «1») из имени таблицы;
PodTech.io
1

Фактически вы можете использовать оператор IF в последних версиях MySQL.

IF(expr,if_true_expr,if_false_expr)

IE:

SELECT name, IF(ISNULL(name), 'robot', 'human') AS type
FROM visitors
Сальви Паскуаль
источник
0

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

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

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

Кевин Чен
источник