J'ai trouvé cet extrait de SQL dans une vue et je suis plutôt perplexe par son objectif (SQL réel raccourci pour la brièveté): Je ne peux pas penser à une seule raison du but de Coalecing avec NULL au lieu de simplement faire cela: p> ou à tout le moins n'inclut pas le null explicitement: p> Y a-t-il une raison valable de se fusionner avec NULL au lieu de simplement sélectionner la colonne directement? B> Je ne peux pas m'empêcher de rire et écrivez-le comme une erreur de recrue, mais cela me fait me demander s'il y a une "frange cas "que je ne connais pas. p> p>
3 Réponses :
Vous avez raison - il n'y a aucune raison d'utiliser: ... car si ... supposant que vous veux em> savoir si la valeur est null. p> p> b.foo code> est null, vous pourriez aussi bien simplement utiliser: p>
Je pense que là pourrait em> être un cas de bord, mais c'est très historique - c'est un peu de devinette, mais cela pourrait entourer la situation où B.FOO = '' E.G. une chaîne d'espaces. p>
Retour assez assez loin dans SQL et Ltrim ('') retourné NULL (6 / 6.5), donc je me demande si une fusion sur une chaîne vide l'a également évalué à NULL, s'il l'a fait alors que le mécanisme était utilisé. Cordes d'espaces seulement, dans les valeurs nulelles? (Si toutes les valeurs évaluent comme NULL, la regroupement retournera NULL.) P>
C'est une supposition et je ne peux pas le tester tout de suite, mais ne devrait pas être difficile à vérifier. P>
Je l'utiliserais si j'ai plusieurs colonnes que je veux vérifier si toutes les personnes sont nulles ou non, au lieu d'utiliser et non nulle avec chaque colonne, je peux utiliser une seule coalesce qui rendra le code plus simple. et plus lisible, par exemple
Semble comme une erreur recrue pour moi.
Ou l'exigence a changé plusieurs fois, cette requête a donc été modifiée plusieurs fois par différents développeurs. Peut-être que la regroupement (B.FOO, NULL) a été fusiété (B.FOO, [une certaine valeur / expression]) avant. Ensuite, l'exigence a été modifiée. Donc, quelqu'un vient de changer pour coalée (B.FOO, NULL) sans réfléchir.
Cela a peut-être été un moyen hacrain de déclencher une erreur si b.foo était null. Que ce soit valide ou non est une autre question.