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 avec INNER JOIN


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 23
    Par défaut Problème avec INNER JOIN
    Bonjour,

    J'ai une table Annonces:
    ann_id
    ann_Nom
    ...
    ann_Categories
    ann_Categories1
    ann_Categories2

    et une table Categories:
    Cat_Id
    Cat_Nom

    J'arrive à joindre les 2 tables de cette manière.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM [Annonces] INNER JOIN Categories 
    ON Annonces.Ann_Categories = Categories.Cat_Id WHERE (Ann_Id = @Ann_Id)
    malheureusement je n'arrive pas à joindre les 3 champs de la tables Annonces
    ann_Categories
    ann_Categories1
    ann_Categories2

    aux champs Categories.Cat_Id de la table Categories.

    J'ai essayé cela mais sans succés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT * FROM [Annonces] 
    INNER JOIN Categories 
    ON Annonces.Ann_Categories = Categories.Cat_Id
    ON Annonces.Ann_Categories1 = Categories.Cat_Id
    ON Annonces.Ann_Categories2 = Categories.Cat_Id
    WHERE (Ann_Id = @Ann_Id)
    Si quelqu'un a une idée...
    MERCI

  2. #2
    Membre chevronné Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Par défaut
    Bonjour

    Ta modélisation ne semble pas correcte. Au lieu d'avoir des colones Categories dans ta table Annonces tu devrais avoir une relation entre elle et la table Catégories.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    T_Annonces
    ANN_ID
    ANN_Nom
    ...
     
    T_Categories
    CAT_ID
    CAT_Nom
    ...
     
    T_CategoriesAnnonces
    ANN_ID
    CAT_ID
    De cette manière tu pourras faire ton INNER JOIN ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ANN.ANN_Nom, CAT.CAT_Nom
    FROM T_Annonces ANN
    JOIN T_CategoriesAnnonces CAN
      ON CAN.ANN_ID = ANN.ANN_ID
    JOIN T_Categories CAT
      ON CAT.CAT_ID = CAN.CAT_ID
    Cette architecture permet d'avoir un nombre de catégories variable en fonction de l'annonce.

    Par la suite tu vas certainement me demander comment représenter tout ça sous la forme d'un tableau du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ANNONCE - CATEGORIE - CATEGORIE - CATEGORIE - ...
    --------------------------------------------------
      Nom     |    Nom        |    Nom        |    Nom
    C'est de la cosmetique et ce sera à ton appli cliente de se débrouiller pour représenter les données ainsi, ce n'est pas au SGBD de le faire.

    Cordialement

  3. #3
    rsc
    rsc est déconnecté
    Membre émérite
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Par défaut
    Sans reprendre les considérations de modélisation de elbj, voici une réécriture correcte de ta clause JOIN, puisqu'il s'agit (à ce que j'ai compris) de 3 jointures distinctes sur la même table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    INNER JOIN Categories C
    ON Annonces.Ann_Categories = Categories.Cat_Id
    INNER JOIN Categories C1
    ON Annonces.Ann_Categories1 = Categories.Cat_Id
    INNER JOIN Categories C2
    ON Annonces.Ann_Categories2 = Categories.Cat_Id
    étant bien entendu que cette requête va te ramener les champs de Annonces où les trois champs catégorie correspondent à une ou des valeurs dans Categories (et bien sûr remplissant la condition Where. Est-ce bien ce que tu veux ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 23
    Par défaut
    Salut !

    rsc c'est exactement ce que je veux faire.
    J'ai essayé ton code mais cela ne fonctionne pas.
    Voici mon code inspiré du tien et le message d'erreur que cela me renvoi.

    Merci à vous deux de votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT * FROM [Annonces] 
    INNER JOIN Categories C ON Annonces.Ann_Categories = Categories.Cat_Id
    INNER JOIN Categories C1 ON Annonces.Ann_Categories1 = Categories.Cat_Id 
    INNER JOIN Categories C2 ON Annonces.Ann_Categories2 = Categories.Cat_Id 
    WHERE (Ann_Id = @Ann_Id)

    Voici l'erreur renvoyé lors de la tentative :
    The multi-part identifier "Categories.Cat_Id" could not be bound.

  5. #5
    rsc
    rsc est déconnecté
    Membre émérite
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Par défaut
    Et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT * FROM [Annonces] 
    INNER JOIN Categories C ON Annonces.Ann_Categories = C.Cat_Id
    INNER JOIN Categories C1 ON Annonces.Ann_Categories1 = C1.Cat_Id 
    INNER JOIN Categories C2 ON Annonces.Ann_Categories2 = C2.Cat_Id 
    WHERE (Annonces.Ann_Id = @Ann_Id)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 23
    Par défaut
    rsc

    Plus de message d'erreur, mais l'annonce n'est pas renvoyée.

  7. #7
    rsc
    rsc est déconnecté
    Membre émérite
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Par défaut
    Combien de lignes devraient t'être renvoyées, une, quelques-unes, beaucoup ?
    A mon avis, le pb doit venir de tes données.

    Quelques pistes pour cerner le problème :
    - tu supprimes la clause WHERE, et tu regardes ce qui sort
    - tu supprimes toutes les jointures...
    - tu ne gardes qu'une jointure ou deux jointures (à tour de rôle), et tu regardes les valeurs des autres colonnes Catégorie...

    Tu devrais arriver à trouver le pb.

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

Discussions similaires

  1. problème avec inner join
    Par minooo dans le forum Oracle
    Réponses: 2
    Dernier message: 20/12/2010, 22h08
  2. Problème avec Inner Join
    Par angelevil dans le forum VB.NET
    Réponses: 4
    Dernier message: 10/06/2009, 16h01
  3. [MySQL] Problème avec INNER JOIN
    Par Tee shot dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/02/2008, 14h28
  4. Problème de jointure avec INNER JOIN et LEFT OUTER JOIN
    Par tonio-lille dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/02/2006, 12h45
  5. [Oracle] problème avec INNER JOIN
    Par Philofish dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/09/2005, 10h20

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