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

Bases de données Delphi Discussion :

requête sql avec jointure


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 109
    Par défaut requête sql avec jointure
    Bonjour à tous
    J'ai une base de données fireBird qui comporte 3 tables : C_OPERATION, C_TYPE, C_CATEGORIE

    la requête suivante fonctionne très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Form15.IBQuery1.SQL.Text:='SELECT O.*,'    
                              +'T.NOM_TYPE,'
                              +'C.NOM_CATEGORIE '
                              +'FROM C_OPERATION O '
                              +'INNER JOIN C_TYPE T ON O.ID_TYPE=T.ID_TYPE '
                              +'INNER JOIN C_CATEGORIE C ON O.ID_CATEGORIE=C.ID_CATEGORIE '
                              +'WHERE ID_COMPTE=1';
    mais la requête suivante ne fonctionne plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Form15.IBQuery1.SQL.Text:='SELECT O.*,'     // assign new SQL expression
                              +'T.NOM_TYPE,'
                              +'C.NOM_CATEGORIE '
                              +'FROM C_OPERATION O '
                              +'INNER JOIN C_TYPE T ON O.ID_TYPE=T.ID_TYPE '
                              +'INNER JOIN C_CATEGORIE C ON O.ID_CATEGORIE=C.ID_CATEGORIE '
                              +'WHERE ID_COMPTE=1'
                              +'AND ID_TYPE=5';  // Rajout uniquement de cette condition
    J'obtiens le message d'erreurr suivant :

    Nom : Capture.JPG
Affichages : 657
Taille : 12,3 Ko

    Je sèche de puis quelques jours. Merci de vos suggestions

    JLouis

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 659
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Il faut spécifier par l'alias de table quelle est la colonne qui doit être utilisé.

    O.ID_TYPE ou T.ID_TYPE, je pense que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Form15.IBQuery1.SQL.Text:='SELECT O.*,'     // assign new SQL expression
                              +'T.NOM_TYPE,'
                              +'C.NOM_CATEGORIE '
                              +'FROM C_OPERATION O '
                              +'INNER JOIN C_TYPE T ON O.ID_TYPE=T.ID_TYPE '
                              +'INNER JOIN C_CATEGORIE C ON O.ID_CATEGORIE=C.ID_CATEGORIE '
                              +'WHERE O.ID_COMPTE=1'
                              +'AND O.ID_TYPE=5';
    sera plus explicite

  3. #3
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 109
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    Il faut spécifier par l'alias de table quelle est la colonne qui doit être utilisé.

    O.ID_TYPE ou T.ID_TYPE, je pense que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Form15.IBQuery1.SQL.Text:='SELECT O.*,'    
                              +'T.NOM_TYPE,'
                              +'C.NOM_CATEGORIE '
                              +'FROM C_OPERATION O '
                              +'INNER JOIN C_TYPE T ON O.ID_TYPE=T.ID_TYPE '
                              +'INNER JOIN C_CATEGORIE C ON O.ID_CATEGORIE=C.ID_CATEGORIE '
                              +'WHERE O.ID_COMPTE=1'
                              +'AND O.ID_TYPE=5';
    sera plus explicite
    J'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'WHERE O.ID_COMPTE=1'
    +'AND O.ID_TYPE=5'
    Je n'ai plus de message d'erreur, mais la requête ne renvoie aucun résultat alors que je suis sûr qu'il y a des résultats.

    JLouis

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 659
    Billets dans le blog
    65
    Par défaut
    j'ai l'impression qu'il manque un espace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'WHERE O.ID_COMPTE=1 '
    +'AND O.ID_TYPE=5'
    cette concaténation de chaine n'aide pas trop

    je préfère nettement un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Form15.IBQuery1.SQL.Text:='SELECT O.*,T.NOM_TYPE,C.NOM_CATEGORIE ';
    Form15.IBQuery1.SQL.Add('FROM C_OPERATION O');
    Form15.IBQuery1.SQL.Add('INNER JOIN C_TYPE T ON O.ID_TYPE=T.ID_TYPE');
    Form15.IBQuery1.SQL.Add('INNER JOIN C_CATEGORIE C ON O.ID_CATEGORIE=C.ID_CATEGORIE');
    Form15.IBQuery1.SQL.Add('WHERE O.ID_COMPTE=1 AND O.ID_TYPE=5');
    Plus facile à lire
    et encore mieux une requête paramétrée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form15.IBQuery1.SQL.Add('WHERE O.ID_COMPTE=:IDC AND O.ID_TYPE=:IDT');

  5. #5
    Membre éclairé

    Inscrit en
    Janvier 2005
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 532
    Par défaut
    salut,
    je pense plutôt aux parenthèses,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Form15.IBQuery1.SQL.Add('WHERE ((O.ID_COMPTE=:IDC) AND (O.ID_TYPE=:IDT))');
    Merci

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 659
    Billets dans le blog
    65
    Par défaut
    Non, les parenthèses ne sont pas nécessaires

Discussions similaires

  1. Optimisation requête sql avec jointures n,n
    Par Invité dans le forum Requêtes
    Réponses: 15
    Dernier message: 13/11/2012, 11h30
  2. Requête sql avec jointure et table vide (ou tuple nulle)
    Par Aenur56 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 29/04/2010, 14h10
  3. Construction d'une requête SQL avec jointure
    Par Didiou35 dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/10/2009, 22h26
  4. Requête SQL avec jointure
    Par manu32320 dans le forum Zend_Db
    Réponses: 3
    Dernier message: 17/05/2009, 00h19
  5. Requête SQL avec jointure sur trois tables
    Par pit2121 dans le forum SQL
    Réponses: 0
    Dernier message: 19/05/2008, 20h24

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