11
votes

Regrouper avec null

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é): XXX

Je ne peux pas penser à une seule raison du but de Coalecing avec NULL au lieu de simplement faire cela: xxx

ou à tout le moins n'inclut pas le null explicitement: xxx < p> Je ne sais pas qui l'aurait écrit (donc je ne peux pas demander), quand il a été écrit, ou pour quelle version spécifique MS SQL Server, il a été écrit pour (avant 2008, à votre aide).

Y a-t-il une raison valable de se fusionner avec NULL au lieu de simplement sélectionner la colonne directement? 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.


3 commentaires

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.


3 Réponses :


12
votes

Vous avez raison - il n'y a aucune raison d'utiliser: xxx

... car si b.foo est null, vous pourriez aussi bien simplement utiliser: xxx

... supposant que vous veux savoir si la valeur est null.


0 commentaires

4
votes

Je pense que là pourrait ê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.

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

C'est une supposition et je ne peux pas le tester tout de suite, mais ne devrait pas être difficile à vérifier.


0 commentaires

0
votes

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 xxx


0 commentaires