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 :

Problème de jointure et de count


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2009
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 346
    Par défaut Problème de jointure et de count
    Voici mon problème, je suis malgré moi obligé d'apprendre le SQL dans le cadre d'un stage où je dois réaliser des statistiques.
    Le client utilisé est : Hyperfile (je ne connais pas ensuite le langage SQL spécifique (ci c'est du MySQL...) car je débute.

    J'ai un problème de jointure de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    SELECT CABINET
    ,COMPTAGE1
    ,COMPTAGE2 
     
    FROM
     
    (SELECT CABINET
    , COUNT (*) AS COMPTAGE1
    FROM DOSSIERS.FIC
    WHERE "des trucs"
    GROUP BY CABINET) T1
     
    FULL OUTER JOIN
     
    (SELECT CABINET
    , COUNT (*) AS COMPTAGE2
    FROM 
          (SELECT DISTINCT ID_DOSSIER
           ,...
           ,... 
           FROM (DOSSIERS.FIC OUTER JOIN DANGEROSITE_DOSSIER.FIC 
                                        ON DOSSIERS.FIC.ID_DOSSIER = DANGEROSITE_DOSSIER.FIC.ID_DOSSIER 
                    WHERE "des trucs")
          GROUP BY CABINET) T2
     
    ON T1.CABINET=T2.CABINET;
    (Désolé pour la mise en forme je n'ai pas réussi à l'afficher comme il est demandé dans la charte :/)

    En tous cas cela ne fonctionne pas (je ne peux pas faire de CREATE VIEW premier AS matable1... car la fonction CREATE VIEW n'est pas gérée).
    Si je remplace la table notée T1 par DOSSIERS.FIC par exemple (et que je modifie le ON final) il n'y a pas de message d'erreur, mais dès que je mets un SELECT, au final, il dit : T1.FIC introuvable. C'est comme s'il oubliait le début !

    Celà est-il dû aux 2 count ? (cela a déjà fonctionné avec des requêtes plus simples) ou est-ce du à un problème de 2 JOIN ? Cela fait 11h que je bute sur ce problème qui consite au final à joindre 2 tables de 2 colonnes dont une commune...

    Je précise que chaque table prise à partie fonctionne parfaitement. C'est au moment de la jointure qu'il ne se passe rien.

    J'ai essayé de regarder dans les autres posts mais aucun ne m'a sorti du pétrin ! :p

    Merci en tous cas à ceux qui auront lu mon message.

    Eric.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Bonjour,

    Que veut dire "cela ne fonctionne pas"?

    Il me semble que tu as une parenthèse gauche en trop dans ta seconde requête, juste avant "DOSSIERS.FIC OUTER JOIN".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    SELECT coalesce(T1.CABINET, T2.CABINET),T1.COMPTAGE1,T2.COMPTAGE2 
    FROM
        (
         SELECT 
                CABINET, 
                COUNT (*) AS COMPTAGE1
         FROM DOSSIERS.FIC
         WHERE "des trucs"
         GROUP BY CABINET
        ) T1
    FULL OUTER JOIN
        (
         SELECT 
                CABINET, 
                COUNT (*) AS COMPTAGE2
         FROM 
              (
               SELECT DISTINCT 
                      ID_DOSSIER,...,... 
               FROM DOSSIERS.FIC 
               OUTER JOIN DANGEROSITE_DOSSIER.FIC 
                     ON DOSSIERS.FIC.ID_DOSSIER = DANGEROSITE_DOSSIER.FIC.ID_DOSSIER 
               WHERE "des trucs"
               )
         GROUP BY CABINET
        ) T2
    ON T1.CABINET=T2.CABINET;

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2009
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 346
    Par défaut
    Bonjour,

    Cela ne fonctionne pas signifie qu'il ne se passe rien. Aucun message d'erreur mais rien n'apparaît (pourtant il réfléchit 10 secondes)

    J'ai bien retapé ma requête exacte avec votre code et toujours rien.

    Comme j'ai dit plus haut, chacune des 2 tables prise à partie fonctionne parfaitement. C'est le JOIN qui ne fonctionne pas.

  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
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Hyperfile est un moteur extrêmement limité qui ne permet que peu de choses au regard de ce que permet le langage SQL. En particulier je ne crois pas qu'il supporte ni les sous requêtes en tables dérivées (sous requêtes dans la clause FROM), ni les CTE.

    Comme il ne supporte pas non plus les vues. Vous êtes dans une impasse technique.
    Mieux vaut donc changer de SGBDR, sauf à bricoler une solution mi ensembliste mi itérative avec le risque majeur d'avoir des résultats incohérent.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2009
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 346
    Par défaut
    Effectivement si vous êtes dans le vrai, c'est un problème. Cela dit, la requête suivante fonctionne elle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT T1.CABINET,COMPTAGE1,COMPTAGE2
    FROM
        (
        SELECT CABINET, COUNT(*) AS COMPTAGE1
        FROM DOSSIERS.FIC
        WHERE "des trucs"
        GROUP BY CABINET
        ) T1
    OUTER JOIN
        (
        SELECT CABINET, COUNT(*) AS COMPTAGE2
        FROM DOSSIERS.FIC
        WHERE "des trucs"
        GROUP BY CABINET
        ) T2
    ON T1.CABINET = T2.CABINET;
    Quelle est donc la différence avec celle que je voudrais réaliser ? Il y a une jointure de + c'est vrai... et un SELECT aussi....

    Mais c'est quand même affolant si hyperfile ne sait pas joindre 2 colonnes :s

    Eric.

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2009
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 346
    Par défaut
    Re,
    j'ai bien essayé avec LEFT RIGHT FULL CROSS INNER OUTER FASTER BETTER STRONGER... mais rien n'y fait !
    Même au lieu de faire un JOIN j'ai tenté de mettre des virgules et mettre WHERE au lieu du ON final mais rien n'y fait..

    Et oui en temps que stagiaire je me vois mal aller tapoter sur l'épaule de l'informaticien pour lui dire que ca fait 2 semaines que je fais du SQL et que je trouve que ce qu'il a fait n'est vraiment pas top du tout !

    Mais je me vois encore moins expliquer à mon maître de stage que je n'arrive pas à mettre 2 colonnes l'une à côté de l'autre !

    Eric.

  7. #7
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    A ce que j'ai lu, Hyperfile est un SGBD.
    Mais t'as vraiment pas de bol de devoir débuter le SQL sur cette (censure)...

    Enfin bref, on peut déjà tester si c'est parce qu'il a du mal avec le FULL :
    Essaie en remplacant par JOIN puis LEFT OUTER.

    [EDIT] grillé !
    Je pense aussi qu'il faut jetter ce truc à la poubelle... mais je suppose qu'on ne peut pas décider ce genre de chose en tant que stagiaire. Courage !

Discussions similaires

  1. Problème de jointure de tables
    Par AurelBUD dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/04/2005, 16h27
  2. Probléme de jointure
    Par Ajrarn dans le forum Langage SQL
    Réponses: 14
    Dernier message: 24/02/2005, 14h57
  3. Vraisemblable problème de jointure
    Par pimousse76 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2005, 15h34
  4. [MS Access] Problème de jointure
    Par Erakis dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/02/2005, 21h15
  5. Problème de jointure ?!
    Par ebaynaud dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/11/2004, 11h27

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