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

MS SQL Server Discussion :

Auto-jointure problématique


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Auto-jointure problématique
    Bonjour,

    J'ai cette requête qui fonctionne très bien sur une base MySQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT M.IdMatiere, M.Sujet, COUNT(C.IdMatiere) AS Children
    FROM MATIERE AS M
    LEFT JOIN MATIERE AS C ON M.IdMatiere=C.IdPere
    WHERE M.IdPere=0 AND M.IdRetenue=0
    GROUP BY M.IdMatiere
    La table MATIERE représente une arborescence :

    IdMatiere : clé
    Sujet : Libellé de l'entrée
    IdPere : référence à une clé parente

    Le résultat attendu est :
    Idmatiere, Sujet, et un entier indiquant le nombre d'enfants de l'entrée en question.

    J'ai une table équivalente sur SQL-Server à laquelle je soumet la même requête. SQL-Server ne renvoit pas d'erreur, mais aucune ligne de résultat.

    Je ne dois pas prendre le problème par le bon bout, et un petit coup de pouce serait le bienvenue

    Merci à tous...

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Que se passe t'il avec cette correction ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT M.IdMatiere, M.Sujet, COUNT(C.IdMatiere) AS Children
    FROM MATIERE AS M
    LEFT JOIN MATIERE AS C ON M.IdMatiere=C.IdPere
    WHERE M.IdPere=0 AND M.IdRetenue=0
    GROUP BY M.IdMatiere, M.Sujet

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Sergejack Voir le message
    Que se passe t'il avec cette correction ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT M.IdMatiere, M.Sujet, COUNT(C.IdMatiere) AS Children
    FROM MATIERE AS M
    LEFT JOIN MATIERE AS C ON M.IdMatiere=C.IdPere
    WHERE M.IdPere=0 AND M.IdRetenue=0
    GROUP BY M.IdMatiere, M.Sujet
    Le résultat reste le même, cela dit, c'est beaucoup plus propre comme ça, je vais vérifier mes paramètres, c'est étonnant qu'SQL-Server ne renvoit pas une erreur avec la première requête.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 899
    Points : 53 140
    Points
    53 140
    Billets dans le blog
    6
    Par défaut
    MySQL n'est pas un SGBD Relationnel, mais un bouliboulga qui autorise n'importe quoi sauf du SQL.
    Il est frappant de constater que MySQL autorise un GROUP BY sur une partie des colonnes non agrégées. Quel est le sens du résultat ? Mystère car cela est totalement faux d'un point de vue mathématique.
    Le pire est que beaucoup d'utilisateurs ayant étudié le langage SQL à travers cet outil merdique et totalement irrespectueux du langage SQL et des principes des SGBDR viennent se plaindre que les SGBDR qui respectent la norme et donne des résultats correctes sont à leurs yeux anormaux !!!!

    Bref, commencez par apprendre le langage SQL !
    Mon site web comme mes bouquins peuvent vous y aider...

    A +

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Vu que IdMatiere est sans doute la clé primaire (et est donc unique) le résultat en MySQL de cette requête est tout à fait déterministe.

    MySQL permet en faite cette approche EN PLUS de l'approche standard.

    Alors on ne peut pas dire que c'est merdique.
    Seulement, comme tout élément hors du standard, il faut en être conscient lorsque l'on change de téchnologie (cette remarque s'applique à tous les SGDB).


    Et SQLPro, puisque tu te permets ce type de remarque, il serait temps que tu sortes de tes bouqins pour (re)découvrir l'univers de la pratique et ces petits quelque chose que tu sembles ne pas envisager : l'inattendu et l'astuce.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Bref, commencez par apprendre le langage SQL !
    Mon site web comme mes bouquins peuvent vous y aider...
    Oui, bonne idée, merci ! Je viens de commander cet ouvrage sur Amazon :




    Je pense y trouver de quoi améliorer tout ça...

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 899
    Points : 53 140
    Points
    53 140
    Billets dans le blog
    6
    Par défaut
    Et SQLPro, puisque tu te permets ce type de remarque, il serait temps que tu sortes de tes bouqins pour (re)découvrir l'univers de la pratique et ces petits quelque chose que tu sembles ne pas envisager : l'inattendu et l'astuce.
    Tu as raison, faisons en sorte que chaque pays ait ses largeurs de rails et son voltage en courant. Ce sera inattendu et astucieux !!!

    A +

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Comparaison très falacieuse.

    Puisque je parle de fonctionnalités ajoutées à la norme et non du dénis de la norme.


    Enfin soit, le standard c'est ton gagne pain, je comprends tes contrariétés.

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 899
    Points : 53 140
    Points
    53 140
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Sergejack Voir le message
    je parle de fonctionnalités ajoutées à la norme et non du dénis de la norme.
    A moins d'être un imbécile je ne voit pas ce que peut être une fonctionnalités ajoutées à la norme de quelque chose de mathématiquement faux !

    A +

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Les nombres iréels doivent bien te faire jazzer...

Discussions similaires

  1. Requête avec auto jointure récalcitrante
    Par vmolines dans le forum Langage SQL
    Réponses: 15
    Dernier message: 30/03/2006, 21h31
  2. Auto jointure complexe
    Par ricobye dans le forum Langage SQL
    Réponses: 11
    Dernier message: 19/01/2006, 16h02
  3. Trier la hierarchie d'une auto-jointure
    Par Oberown dans le forum Langage SQL
    Réponses: 8
    Dernier message: 17/10/2005, 16h18
  4. resultat d'une auto jointure
    Par slc dans le forum Requêtes
    Réponses: 6
    Dernier message: 30/09/2004, 13h54
  5. Auto jointure speciale
    Par kv000 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 14/04/2004, 13h02

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