MySQL АБО НЕ НУЛЬНИЙ, тоді відображається 1, інше відображається 0


104

Я працюю з невеликим ускладненням дисплея тут. Я впевнений, що є можливість 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, якщо щось існує?


можливий дублікат
Умовного

Відповіді:


211

Замість цього 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.


96
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)

Приклад П.С. Євгена вгорі правильний , але я хотів уточнити цей нюанс, оскільки мене він зненацька зловив.


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

Ще один метод без ДЕ, спробуйте це ..

Вибере значення «Порожнє» та «NULL»

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

Він встановить null, якщо це порожній рядок, то також буде true на цьому.


Також корисно: виберіть 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 повинен працювати

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.