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

SQL Oracle Discussion :

Problème requête sur plusieurs tables avec jointure


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 287
    Points : 91
    Points
    91
    Par défaut Problème requête sur plusieurs tables avec jointure
    Bonjour,

    j'ai besoin de récupérer les données de plusieurs tables, en utilisant la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.champ1, T1.champ2, T2.champ1, T01.order_2
     FROM  table 1 T1, table2 T2
     INNER JOIN (SELECT max(champ01) + 1 AS order_2, champ02 
                      FROM table3 GROUP BY champ02) T01 ON T1.champ1 =  T01.champ02 
     WHERE T1.id = 5027
    Mais j'ai le message suivant:
    ORA-00904: "T1"."champ1" : identificateur non valide

    Avez-vous une idée ?
    Merci

    nota: l'application fonctionne egalement avec firebird et la requete passe sous firebird.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Le message d'erreur vous dit que votre table Table1 ne possède pas de colonne qui s'appelle champ1.

    Il y a un espace entre Table et 1, est-ce voulu ou est-ce une erreur de copier / coller ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 287
    Points : 91
    Points
    91
    Par défaut
    C'est effectivement un problème de retranscription de ma requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.champ1, T1.champ2, T2.champ1, T01.order_2
     FROM  TABLE1 T1, table2 T2
     INNER JOIN (SELECT max(champ01) + 1 AS order_2, champ02 
                      FROM table3 GROUP BY champ02) T01 ON T1.champ1 =  T01.champ02 
     WHERE T1.id = 5027
    Le champ champ1 existe bel et bien dans Table1. Pour preuve, il suffit que j'inverse les tables dans la ligne FROM pour que la requête fonctionne. Mais, je ne peux pas utiliser cette solution car ma vrai requête comporte encore des jointures mais sur Table2. Et le problème est déplacé sur Table2.

    Je fais des essais pour intégrer des sous-requêtes dans la ligne FROM.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Je pense avoir compris.
    Vous avez mélangé la syntaxe ANSI et la vieille syntaxe pour les jointures.

    Il suffit donc d'écrire la requête en respectant complètement la norme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT T1.champ1, T1.champ2, T2.champ1, T01.order_2
      FROM TABLE1 T1
           CROSS JOIN table2 T2
           INNER JOIN (SELECT max(champ01) + 1 AS order_2, champ02
                         FROM table3
                     GROUP BY champ02) T01
             ON T01.champ02 = T1.champ1 
     WHERE T1.id = 5027;

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 287
    Points : 91
    Points
    91
    Par défaut
    Merci, ça fonctionne

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

Discussions similaires

  1. Requête sur plusieurs tables avec plusieurs WHERE
    Par zengarden dans le forum Requêtes
    Réponses: 16
    Dernier message: 18/03/2015, 10h01
  2. Réponses: 9
    Dernier message: 09/05/2009, 17h34
  3. Réponses: 1
    Dernier message: 25/04/2009, 11h31
  4. Requête sur plusieurs tables avec DLookup ?
    Par Falcdyr dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 07/05/2008, 08h50
  5. Réponses: 2
    Dernier message: 12/01/2008, 14h57

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