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 :

pb jointure syntax sql


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 9
    Points : 5
    Points
    5
    Par défaut pb jointure syntax sql
    bonjour, j'ai un petit soucis de syntaxe sql (j'en ai pas fait depuis 10 ans!!)
    j'ai deux tables T1 (col1,col2) et T2 (col1,col3) dans T1 j'ai 3 enregistrements :
    A,10 ; A,20 et A,5 dans T2 j'en ai deux : A,100 et A,50
    je veux obtenir en une seule requete la somme de col2 et Col3 pour col1 = Apar exemple
    le résultat voulu est col1,sum(col2),sum(col3) dans l'exemple A,35,150

    j'ai essayé deux trois trucs mais j'obtiens toujours un produit cartésien en t1 et T2 donc les lignes de T2 répétées autant de fois qu'il y a de lignes correspondantes dans t1 . ici dans l'exemple 6 lignes dans le résultat avec des sum faux bien sûr !!!
    j'ai du savoir faire dans le temps mais je ne me souvient plus !!
    si quelqu'un pouvait m'aider !
    merci

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Bonjour,

    Essaie quelque chose comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select t1.col1,sum(t1.col2),sum(t2.col3)
    from t1
      inner join t2
      on t1.col1=t2.col1
    where t1.col1='A'
    group by t1.col1

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    merci pour ta réponse rapide

    ça ne marche pas car le sql oracle que j'ai
    ne connais pas la syntaxe INNER JOIN !!

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Alors il faut écrire ta jointure à l'ancienne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT t1.col1,sum(t1.col2),sum(t2.col3)
    FROM t1,t2
    where t1.col1=t2.col1
    and t1.col1='A'
    GROUP BY t1.col1
    C'est balo, moi qui essayait (pour une fois) de faire du sql normatif

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    hélas non,

    ça ne marche pas
    c'est ce que j'avais fait en premier !
    si dans l'exemple tu as 4 ligne dans T1 et 1 ligne dans T2, le sum(col2) de T1 est bon mais le sum(col3) de T2 est 4 fois trop grand
    le select ramène autant de ligne de T2 qu'il y a de lignes dans T1 correspondantes ...

  6. #6
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    hello,

    je ferais comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select t1.col1, sum(col2), (select sum(col3) from t2)
    from t1
    group by t1.col1

  7. #7
    Membre éprouvé
    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
    Points : 965
    Points
    965
    Par défaut
    Tu peux aussi essayer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT t1.col1,sum(t1.col2),avg(tmp.col3)
    FROM t1
      JOIN (select col1, sum(col3) as col3 from t2 group by col1) tmp
      ON t1.col1=tmp.col1
    GROUP BY t1.col1

  8. #8
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci des réponses : hélas ça ne marche toujours pas !

    pour Cybher : mon sql refuse deux "select" imbriqués comme ça

    Pour snipah : mon sql (oracle) ne connais pas le mot "JOIN"

    dur dur, je vais passer par des tables intermédiaires ou du pl/sql.....

  9. #9
    Membre éprouvé
    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
    Points : 965
    Points
    965
    Par défaut
    Alors comme ça peut-être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t1.col1,sum(t1.col2),avg(tmp.col3)
    FROM t1, (select col1, sum(col3) from t2 group by col1) tmp
    WHERE t1.col1=tmp.col1
    GROUP BY t1.col1

  10. #10
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    Citation Envoyé par philippe sivy Voir le message
    merci pour ta réponse rapide

    ça ne marche pas car le sql oracle que j'ai
    ne connais pas la syntaxe INNER JOIN !!
    donc avec la requête de snipah sans join mais a l'ancienne cela donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select sum(a1.nombre), tmp.col3
    from a1, (SELECT a2.nom, sum(a2.nombre) AS col3 FROM a2 GROUP BY a2.nom) tmp
    where a1.nom = tmp.nom
    group by tmp.col3
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

  11. #11
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Oui c'est mieux merci
    je ne savais pas qu'on pouvais faire un from t1, (select.....)


    super je vais adapter ça à mon vrai cas du boulot

    merci beaucoup

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Salut philippe,

    Excuse moi pour la requête foireuse, comme tu l'as dis j'ai posté trop vite et je suis tombé en plein dans le piège.
    En plus t'avais posté un jeu de test, j'ai vraiment aucune excuse...

    Mais bon le principal est que tu es trouvé une solution à ton problème.

    @+

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

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

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

    Juste au passage :
    Tu dois avoir un vieil Oracle.
    Notons que la syntaxe normalisée est acceptée à partir d'Oracle 9i !

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

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

Discussions similaires

  1. [MySQL] Jointure : erreur de syntaxe SQL
    Par kawther dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 26/03/2007, 17h25
  2. Pb configuration et syntaxe SQL
    Par Glloq dans le forum Débuter
    Réponses: 2
    Dernier message: 09/09/2004, 15h17
  3. syntax sql spéciale pour postgresql ???
    Par krimson dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 05/05/2004, 15h23
  4. requete syntaxe sql
    Par tomm dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/04/2004, 16h56
  5. Jointures en SQL
    Par Guizz dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/06/2003, 12h21

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