Как использовать Coalesce в MySQL
Немного помогите здесь. Я действительно не понимаю, как использовать этот coalesce в MySQL
Я прочитал все страницы на странице 1, how to use coalsece
в результатах Google.
Я знаю, что это означает, что он возвращает первое ненулевое значение, которое он встречает, и null в противном случае.
Но это все еще неопределенно для меня.
- Почему я увидел запросы, которые возвращают несколько значений? Разве это не только первое не пустое значение, которое возвращается?
- И как это решить, какой столбец для базы?
coalesce(column1,column2)
? что, если первый столбец равен null, а другой столбец не равен нулю? - Или, если я ошибаюсь или мой синтаксис неверен, как я его правильно пишу?
- Может ли кто-нибудь предоставить очень хороший и простой пример того, как его использовать?
- И когда желательно использовать.
Ответы
Ответ 1
-
Почему я видел запросы, которые возвращают несколько значений? isnt это только первое не пустое значение, которое возвращается?
Да, это только первое значение, отличное от NULL, которое возвращается. Вы должны ошибаться в отношении запросов, которые вы видели там, где считали, что это не так: если вы можете показать нам пример, мы могли бы помочь прояснить недоразумение.
-
И как это решить, какой столбец для базы? сливаться (column1, column2)? что, если первый столбец равен null, а другой столбец не равен нулю?
В порядке его аргументов: в этом примере column1
перед column2
.
-
Или, если я ошибаюсь или мой синтаксис неверен, как мне его правильно записать?
Ты не ошибаешься.
-
Может ли кто-нибудь предоставить очень хороший и простой пример того, как его использовать?
Из документации:
mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
-> NULL
-
И когда желательно использовать.
Желательно использовать каждый раз, когда вы хотите выбрать первое значение, отличное от NULL, из списка.
Ответ 2
Я лично использую coalesce, когда хочу найти первый столбец, который не является пустым в строке из списка приоритетов.
Скажем, например, я хочу получить номер телефона из таблицы клиентов, и у них есть 3 столбца для телефонных номеров с именем "мобильный", "домашний" и "работа", но я хочу получить только первое число, которое не пустое.
В этом случае у меня есть приоритет мобильного, затем дома, а затем работа.
TABLE STRUCTURE
--------------------------------------------
| id | customername | mobile | home | work |
--------------------------------------------
| 1 | Joe | 123 | 456 | 789 |
--------------------------------------------
| 2 | Jane | | 654 | 987 |
--------------------------------------------
| 3 | John | | | 321 |
--------------------------------------------
SELECT id, customername, COALESCE(mobile, home, work) AS phone FROM customers
RESULT
------------------------------
| id | customername | phone |
------------------------------
| 1 | Joe | 123 |
------------------------------
| 2 | Jane | 654 |
------------------------------
| 3 | John | 321 |
------------------------------
Ответ 3
COALESCE вернет первый ненулевой столбец или значение.
Пример использования:
SELECT COALESCE(my_column, my_other_column, 'default') as username FROM my_table;
Примеры результатов:
my_column my_other_column results
null null 'default'
null 0 '0'
null 'jimmy' 'jimmy'
'bob' 'jimmy' 'bob'
Ответ 4
Это прекрасный пример того, что Coalesce
if изменит поля/столбцы null
на то, что вы хотите, чтобы они были в случае с null
на 0
и 1
.
Скопируйте это в редактор MySQL, это будет выглядеть намного лучше
Select "Column1 (Dont Want Touched)",
coalesce(column2(That you want set to 0 if null), 0) as column2 /* (give it same name as was e.g. "column2") */,
coalesce(column3(Instead of null set to 1) ,1) as column3 /* (give it same name as was e.g. "column3") */
from "MydataTable"
Where 'somedates' in ('2015-04-10', '2015-04-03', '2015-03-27', '2015-04-17') and id = 10 order by 'somedates';