Home > Trucs & astuces > Teradata – Gestion des nulls

Teradata – Gestion des nulls

Le but de cet article est voir comment il est possible de gérer les valeurs nulles.

Partons du principe que nous avons les tables suivantes à notre disposition.

.
  • Problématique

Nous voulons tous les enregistrements de la table 2 qui ne sont pas présents dans la table 1.

Le résultat attendu est : ‘D’ et ‘E’.

Par un minus, voilà ce qu’on obtient.

Par une sous-requête, voilà ce qu’on obtient.

Le résultat attendu est renvoyé correctement avec le requête utilisant le minus mais pas avec la sous-requête.

Essayons de faire le contraire pour voir : tous les enregistrements de la table 1 qui ne sont pas dans la table 2.

Le résultat attendu est : ‘G’ et null.

Par le minus

Par la sous-requête

Le résultat est correct avec le minus et partiel avec la sous-requête.

Pourquoi ?

.

  • Interprétation des requêtes

La requête contenant la sous-requête pourrait se traduire comme cela :

Le problème c’est que COL1 <> NULL ne signifie rien pour Teradata.

En effet, NULL  n’est pas une valeur. NULL  représente l’absence de données. Il n’est donc pas possible de comparer (quel que soit la comparaison : égalité, différence, supériorité ou infériorité).

Il faudrait remplacer l’écriture COL1 <> NULL par COL1 IS NOT NULL.

Nous devrions donc écrire la requête de la manière suivante :

Autre solution : faire une jointure externe de la table principale et filtrer sur les colonnes de l’autre table à null.

.

  • Cas du ‘IN’

Le problème pour le ‘IN’ est équivalent au ‘NOT IN’. Par contre, on ne peut pas corriger le problème de la même façon.

La seule écriture possible est de transformer le ‘IN’ en jointure normale en testant la possibilité d’avoir les deux colonnes nulles.

Attention : cette écriture avec un ‘OR’ peut dégrader les performances.

.

  • Cas de l’agrégation

La requête doit donc être écrite comme suit pour prendre en compte les valeurs nulles dans chacune des colonnes.

.

  • Cas de la somme

Sur le même principe que l’agrégation, il n’est pas possible de sommer des valeurs nulles.

Il faut donc tester les valeurs nulles pour faire un calcul différent. Il est possible d’écrire la requête sous la forme suivante.

Categories: Trucs & astuces Tags:
  1. No comments yet.
  1. No trackbacks yet.


× 5 = ten