Question SÉLECTIONNER une colonne si l'autre est nulle


Je veux choisir a2.date si c'est là, mais si c'est NULL Je veux choisir a1.date (a2 est laissé à gauche). Ce:

SELECT a2.date OR a1.date
       ...

Retourne simplement un résultat booléen (comme on pourrait s'y attendre), comment puis-je obtenir la valeur réelle de la colonne non nulle? (a2.date est préféré, mais s'il est nul alors a1.date)


35
2018-04-18 02:25


origine


Réponses:


Le moyen ANSI est d'utiliser SE FONDRE:

SELECT COALESCE(a2.date, a1.date) AS `date`
   ...

La syntaxe native de MySQL est IFNULL:

SELECT IFNULL(a2.date, a1.date) AS `date`
   ...

Contrairement à COALESCE, IFNULL n'est pas portable pour les autres bases de données.

Une autre syntaxe ANSI, la Expression CASE, est une option:

SELECT CASE
         WHEN a2.date IS NULL THEN a1.date
         ELSE a2.date
       END AS `date`
   ...

Cela nécessite plus de direction pour fonctionner correctement, mais est plus flexible si les exigences changent.


89
2018-04-18 02:32



Découvrez la fonction COALESCE.

Prend un nombre variable d'arguments et renvoie le premier non-nul. Cela fonctionne bien avec des jointures.


5
2018-04-18 02:27



Utiliser un CASE déclaration pour le select.

SELECT CASE WHEN a2.date IS NULL THEN a1.date
    ELSE a2.date END AS mydate

4
2018-04-18 02:26



SELECT COALESCE(a2.date, a1.date) ...

3
2018-04-18 02:29