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 :

Aide sur une requête SQL/ Test Coding Game


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Data science
    Inscrit en
    Avril 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Data science
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2019
    Messages : 16
    Par défaut Aide sur une requête SQL/ Test Coding Game
    Bonjour,
    j'ai effectué un test coding game et je suis assez étonné des mes résultats obtenus étant donné que lorsque j'ai testé mes requêtes elles me donnaient les sorties attendues.
    Voici la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
         SELECT p.name as product_name, c.name category_name
         FROM product p 
         left outer join PRODUCT_CATEGORY c
         on p.product_category_id=c.product_category_id
         where c.name is not null
    Et l'énoncé en PJ.

    Pouvez-vous me dire à quel niveau ma requête est fausse svp ?

    Nom : Capture.PNG
Affichages : 6021
Taille : 76,0 Ko

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    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 134
    Par défaut
    Bonjour mobbebede,

    En ajoutant à la ligne 5 une restriction sur product_category.name, la jointure externe se trouve transformée de facto en jointure stricte et les produits pour lesquels il n'existe pas de catégorie sont exclus du résultat.
    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.

  3. #3
    Membre actif
    Homme Profil pro
    Data science
    Inscrit en
    Avril 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Data science
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2019
    Messages : 16
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Bonjour mobbebede,

    En ajoutant à la ligne 5 une restriction sur product_category.name, la jointure externe se trouve transformée de facto en jointure stricte et les produits pour lesquels il n'existe pas de catégorie sont exclus du résultat.

    Donc ma 5e ligne de code est fausse ? pourtant quand j'ai testé ca exclut bien les produits (name) qui avaient une valeur "NULL" en category_name c'est etrange

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 599
    Billets dans le blog
    10
    Par défaut
    Le principe d'une jointure externe (outer join) est de récupérer facultativement les données de la table externe.
    Quand il n'y a pas de correspondance entre les éléments de la table inner et ceux de la table outer pour les critères de jointure, la requête renvoie "null" pour les colonnes de la table outer.

    Or, vous avez rajouté une restriction where c.name is not null.
    Du coup, tout se passe comme si vous aviez codé une jointure inner, car les lignes dont le nom est marqué "null" sont écartées.

    C'est un piège classique

    Enlevez simplement cette restriction et comparez le résultat

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 599
    Billets dans le blog
    10
    Par défaut
    Effectivement, la restriction transforme la jointure outer en jointure inner

    Par ailleurs, ce point de l'énoncé
    Citation Envoyé par mobbebede Voir le message
    dans le cas contraire, ne pas afficher de valeur (null) pour la catégorie
    requiert l'utilisation de la fonction coalesce comme suit (exemple de remplacement possible) :
    COALESCE(c.name, '*** néant ***')

Discussions similaires

  1. aide sur une requete Sql
    Par omzoway7 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/07/2021, 12h16
  2. Besoin d'aide sur une requete sql ?
    Par S.H dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/02/2018, 14h08
  3. Besoin d'aide sur une requete sql
    Par Neo57 dans le forum Requêtes
    Réponses: 5
    Dernier message: 13/01/2010, 15h43
  4. Aide sur une requete SQL
    Par NABIL74 dans le forum Bases de données
    Réponses: 6
    Dernier message: 17/12/2008, 18h25
  5. aide sur une requete sql
    Par digger dans le forum Langage SQL
    Réponses: 1
    Dernier message: 23/11/2006, 17h19

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