IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Jointure Naturelle (Champs null)


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Par défaut Jointure Naturelle (Champs null)
    Bonjour Tout le monde,

    Je débute avec les jointures naturelles et j'ai besoin d'une petite clarification :

    D'après ce que j'ai lu , 'la jointure naturelle prend en considération l'égalité du contenu des colonnes (ayant le même nom et même type)'. Jusque là c'est bon. J'ai modifié mes tables d'une manière à ce que j'aie dans chacune une colonne (de même nom) mais sans contenu (contenu = null). Là quand j'exécute la requête plus de résultat, sauf si je modifie le contenu de la colonne (dans chaque table).

    Ma question est : à part la correspondance entre le nom et le type, est-ce que le contenu doit être différent de null pour que le compilateur sql tienne compte de l'enregistrement ?

    Merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 439
    Par défaut
    Bonjour,
    Le comportement décrit est normal: null n'est égal à rien, pas même à null. Donc le test d'égalité échoue.
    La même requête avec une jointure interne aurai donné le même résultat.

    Tatayo.

  3. #3
    Membre averti
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Par défaut
    Merci pour cette information. Y'aura t-il une méthode qui permet d'ignorer les champs null ? (en utilisant les NVL? mais je n'ai aucune idée sur la manière d'injecter cette fonction dans la requête.)

  4. #4
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Quelque chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ...
    FROM table1 t1 NATURAL JOIN table2 t2
    WHERE t1.colonne IS NOT NULL;
    Mais ça reviendrait à faire ceci (donc inutile) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT ...
    FROM table1 NATURAL JOIN table2;
    Car :

    Citation Envoyé par tatayo
    Le comportement décrit est normal: null n'est égal à rien, pas même à null. Donc le test d'égalité échoue.
    Du coup c'est comme si tu filtrait déjà tes colonnes nulles . Même choses avec les INNER JOIN ou les jointures via la clause WHERE (à proscrire).

    Cordialement,
    Idriss

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 135
    Par défaut
    Pour joindre les valeurs nulles, tu peux faire ça : COALESCE(table1.colonne, valeur) = COALESCE(table2.colonne, valeur) en utilisant une valeur dont tu es certain qu'elle n'apparait pas dans ta colonne, sinon tu risquerais d'avoir jointure entre des lignes qui ne correspondent pas.
    Toutefois, cette manière de faire ne permettra pas l'utilisation éventuelle d'un index sur ta colonne pour optimiser la recherche.

    L'expression (table1.colonne = table2.colonne OR (table1.colonne IS NULL AND table2.colonne IS NULL)) est un peu plus lourde mais plus efficace.
    De plus, elle te dispense de la valeur "inexistante", potentielle source de problème.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    De toute façon la syntaxe NATURAL JOIN est à proscrire (manque d'information à la lecture de la requête plus problème si une nouvelle colonne apparaît portant le même nom que dans l'autre table mais n'ayant rien à voir, ce qui serait certes une erreur de modélistaion mais bon les erreurs de modélisations...)
    Citation Envoyé par BloodH Voir le message
    J'ai modifié mes tables d'une manière à ce que j'aie dans chacune une colonne (de même nom) mais sans contenu (contenu = null).
    Quel était l'objectif de cette colonne sans valeur... Il est possible de renommer une colonne si besoin.

  7. #7
    Membre averti
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    ....

    Quel était l'objectif de cette colonne sans valeur... Il est possible de renommer une colonne si besoin.
    L'objetcif etait de voir effectivement si la jointure naturelle prenait en concideration les valeurs nulles.

    Donc en d'autres termes, sur ce que j'ai constaté d'après vos messages, que je peux pas surpasser le filtre des valeurs nulles vu que la jointure naturelle comprend un post-filtre pour les valeus nulles.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Résultat jointure avec champs null
    Par ideal23 dans le forum Langage SQL
    Réponses: 26
    Dernier message: 12/12/2011, 11h12
  2. Jointure et champs null
    Par Tevsox dans le forum Langage SQL
    Réponses: 6
    Dernier message: 26/10/2011, 09h03
  3. jointure avec champ à null
    Par radahm dans le forum PL/SQL
    Réponses: 2
    Dernier message: 03/11/2009, 10h51
  4. Requete select : jointure avec champs null
    Par Tidus159 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 06/06/2008, 13h31
  5. Pb Jointure reflexive et champ NULL
    Par VincentR dans le forum SQL
    Réponses: 8
    Dernier message: 19/01/2005, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo