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

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

Этот первый пример этого не делает. Но я могу использовать COALESCE неправильно.

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

select if(name, 1, 0) ..

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

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

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

Ответ 4

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

Ответ 5

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

Выберет значения Empty и NULL

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

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

Ответ 6

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

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

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

Ответ 7

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

IF(expr,if_true_expr,if_false_expr)

IE:

SELECT name, IF(ISNULL(name), 'robot', 'human') AS type
FROM visitors