La meilleure façon d'écrire de l'union de requête lorsque vous traitez avec des NULS et Vides de la Chaîne de valeurs
Je dois écrire une requête qui effectue une union entre deux tables avec des données similaires. Les résultats doivent être distincts. Le problème que j'ai, c'est que certains champs doivent être les mêmes ne sont pas quand il s'agit de valeurs vides. Certains sont indiqués comme nulle, et certains ont vide les valeurs de chaîne. Ma question est, est-il une meilleure façon d'exécuter la requête suivante? (sans corriger les données réelles pour assurer la bonne valeurs par défaut sont définies, etc) Sera le Cas Quand un gros gain de performance?
Select
When Column1 = '' Then NULL Else Column1 as [Column1],
When Column2 = '' Then NULL Else Column2 as [Column2]
From TableA
UNION ALL
Select
When Column1 = '' Then NULL Else Column1 as [Column1],
When Column2 = '' Then NULL Else Column2 as [Column2]
From TableB
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que cela ferait une différence dans la performance, mais NULLIF est une autre façon d'écrire cela et, à mon humble avis, l'air un peu plus propre.
Utilisation
UNION
de supprimer les doublons - il est plus lent queUNION ALL
pour cette fonctionnalité:J'ai changé la logique de retourner la valeur NULL si la valeur de la colonne contient un nombre quelconque d'espaces et aucun contenu réel.
CASE
expressions sont la norme ANSI, et plus personnalisable que NULLIF/etc syntaxe.Un
Case
doit effectuer très bien, maisIsNull
est plus naturel dans cette situation. Et si vous êtes à la recherche pour les différentes lignes, de faire ununion
au lieu d'ununion all
réaliser tout cela (merci à Jeffrey L Whitledge pour le signaler):union
est incorrect pour SQL Server.union
va supprimer tous les doublons de lignes à partir des résultats indépendamment de leur source.Vous pouvez garder vos opérations de manipulation distincte de l'union, si vous faites ce que la manipulation que vous voulez (à remplacer par la valeur NULL pour la chaîne vide) dans une vue séparée, puis de l'union de la vue.
Vous ne devriez pas avoir à appliquer la même manipulation sur les deux séries, si.
Si c'est le cas, de l'union tout d'abord, puis appliquer la manipulation de l', réunies ensemble une fois.
La moitié de manipulation de code à l'appui de cette manière.