web-dev-qa-db-fra.com

Comment utiliser Coalesce dans MySQL

Un peu d'aide ici. Je ne comprends vraiment pas comment utiliser cette fusion dans MySQL

J'ai lu toutes les pages de la page 1 résultat de how to use coalsece dans le résultat de Google. 

Je sais que cela signifie qu'il renvoie la première valeur non nulle qu'il rencontre et null sinon.

Mais c'est encore vague pour moi.

  1. Pourquoi ai-je vu des requêtes renvoyant plusieurs valeurs? N'est-ce pas seulement la première valeur non nulle qui est renvoyée?
  2. Et comment décide-t-il quelle colonne baser? coalesce(column1,column2)? Et si la première colonne est nulle et l'autre colonne n'est pas nulle?
  3. Ou si je me trompe ou si ma syntaxe est fausse, comment puis-je l'écrire correctement?
  4. Quelqu'un peut-il fournir un exemple simple et très bon sur la façon de l'utiliser?
  5. Et quand il est souhaitable d'utiliser.
26
Belmark Caday
  1. Pourquoi ai-je vu des requêtes qui renvoient plusieurs valeurs? n'est-ce pas seulement la première valeur non nulle qui est retournée?

    Oui, seule la première valeur non NULL est renvoyée. Vous devez vous tromper au sujet des questions que vous avez vues et qui vous ont paru que ce n'était pas le cas: si vous pouviez nous montrer un exemple, nous pourrions peut-être aider à clarifier le malentendu.

  2. Et comment décide-t-il quelle colonne baser? coalesce (colonne1, colonne2)? Et si la première colonne est nulle et l'autre colonne n'est pas nulle?

    Dans l'ordre de ses arguments: dans cet exemple, column1 avant column2.

  3. Ou si je me trompe ou si ma syntaxe est fausse, comment puis-je l'écrire correctement?

    Tu n'as pas tort.

  4. Quelqu'un peut-il fournir un exemple simple et très bon sur la façon de l'utiliser?

    Extrait de la documentation :

    
    mysql> SELECT COALESCE(NULL,1);
            -> 1
    mysql> SELECT COALESCE(NULL,NULL,NULL);
            -> NULL
    
  5. Et quand il est souhaitable d'utiliser.

    Il est souhaitable d’utiliser chaque fois que l’on souhaite sélectionner la première valeur non NULL dans une liste.

34
eggyal

Personnellement, j’utilise coalesce lorsque je veux trouver la première colonne qui n’est pas vide dans une rangée de la liste des priorités.

Supposons, par exemple, que je veuille obtenir un numéro de téléphone d’une table client et qu’ils aient 3 colonnes pour les numéros de téléphone nommés mobile, domicile et travail, mais que je souhaite uniquement récupérer le premier numéro qui n’est pas vierge.

Dans ce cas, j'ai la priorité du mobile, puis de la maison puis du travail.

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    |
------------------------------
24
crazeyez

COALESCE renverra la première colonne ou valeur non nulle.

Exemple d'utilisation:

SELECT COALESCE(my_column, my_other_column, 'default') as username FROM my_table;

Exemple de résultats:

my_column  my_other_column     results
null       null                'default'
null       0                   '0'
null       'jimmy'             'jimmy'
'bob'      'jimmy'             'bob'
3
Andrew

C’est un exemple parfait de la Coalesce si les champs/colonnes nuls sont remplacés par ce que vous voulez qu’ils soient dans le cas de null à 0 et 1. Copiez ceci dans un éditeur mysql, le résultat sera bien meilleur

Sélectionnez "Column1 (Dont Want Touched)", coalesce (column2 (que vous souhaitez définir sur 0 si null), 0) comme column2 (attribuez-lui le même nom que par exemple "column2"), coalesce (column3 (au lieu de null définie sur 1), 1) comme colonne3 (donnez-lui le même nom que par exemple "colonne3")
de "MydataTable" Where 'somedates' in ('2015-04-10', '2015-04-03', '2015-03-27', '2015-04-17') et id = 10 order par 'somedates';

0
Pec1983