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

Requêtes et SQL. Discussion :

requête SQL problème avec relation N-N


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 325
    Par défaut requête SQL problème avec relation N-N
    Bonjour,

    Je vous expose mon problème.
    j'ai une BD qui repertorie les plantes et toute leur caractéristique ainsi que leurs utilisations.

    la structure est comme suit:
    T_IDplante 1 --- N T_Utilisation (standardisées)
    T_IDplante 1 ---N T_ID/Util N----1 T_AutreUtilisation

    T_IDplante contient la description de la plante
    T_Utilisation contient une serie de champs O/N comme Haie, isolé, rocaille,...
    T_AutreUtilisation contient un listing des autres utilisations possibles comme sel de déneigement, culinaire/aromatique, champêtre,... un peu de tout.

    Mon problème est que j'arrive parfaitement à faire un formulaire multi-critère sur les tables IDPlante et Utilisation mais un seul critère de la table AutreUtilisation.
    Si je met plus qu'un seul critère, ca me retourne 0 plantes.

    voici la partie de mon code qui me pose problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SQL = "SELECT Identité.ID, Identité.[nom latin], Identité.type, Identité.feuillage, Identité.exposition FROM TAutrUtil INNER JOIN ((Identité INNER JOIN utilisation ON Identité.ID = utilisation.ID) INNER JOIN [ID/Util] ON Identité.ID = [ID/Util].IDPlante) ON TAutrUtil.AutrUtil = [ID/Util].AUtil WHERE Identité.ID<>0"
     
    ...
    If Not IsNull(Me.AUtil1) Then
    SQL = SQL & " And [ID/Util].AUtil =" & "'" & Me.AUtil1 & "'"
    End If
    If Not IsNull(Me.AUtil2) Then
    SQL = SQL & " And [ID/Util].AUtil =" & "'" & Me.AUtil2 & "'"
    End If
    If Not IsNull(Me.AUtil3) Then
    SQL = SQL & " And [ID/Util].AUtil =" & "'" & Me.AUtil3 & "'"
    End If
     
    ...
    Quelqu'un peut il m'aider a comprendre où se situe mon erreur.
    merci

  2. #2
    Membre Expert
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Par défaut
    Essaie peut-être le tuto de debuggage des requêtes SQL écrites par VBA.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 325
    Par défaut
    Je vais lire ca mais je ne pense pas que ce soit un problème de synthaxe mais plutot un problème d'operateur.

    Malheureusement si j'utilise le OU ils va me retourner plusieurs enregistrements mais qui correspondent pas spécialement au 2 critères a la fois!

    Y a t'il une autre solution?

  4. #4
    Membre Expert
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Par défaut
    mais qui correspondent pas spécialement au 2 critères a la fois!
    ça ne peut pas correspondre aux deux critères à la fois puisque tes deux critères donnent deux valeurs différentes à un même champs.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 325
    Par défaut
    Bonjour Demco,

    C'est bien ce que je craignais.
    Vois tu un moyen qui me permettrais de contourner le problème et de me retourner les enregistrement qui correspondent au 2 critères?

  6. #6
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    salut p'tite Sandrine et Demco,

    p'tite Sandrine j'ai plusieurs remarques à faire:
    .le nom de tes tables ne correspondent pas à ceux décrits.
    .tu ne dis pas non plus l'utilité de ID/UTIL qui ne me parait pas nécessaire (mais c'est vrai: là n'est pas la question).
    .tu demande comme critère: ... et AUtil='champêtre' et AUtil='culinaire/aromatique'...
    tu comprends bien que AUtil ne peut être les deux à la fois, ce qui explique que tu n'as plus aucun résultat quand tu veux mettre plus de deux critère sur AUtil.
    .il faut effectivement mettre OU
    mais tu oublie comment est faite ta requete: si tu mets des OU à la place:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = SQL & " OR [ID/Util].AUtil
    tu auras après:
    WHERE Identité.ID<>0 OR [ID/Util].AUtil=... OR [ID/Util].AUtil=...
    ce qui fait sauté ta première condition: Identité.ID<>0
    il te faut:
    WHERE Identité.ID<>0 AND ([ID/Util].AUtil=... OR [ID/Util].AUtil=...)

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

Discussions similaires

  1. Requête sql problème avec un 'LIKE'
    Par Farow dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/10/2011, 09h31
  2. [SQL] Problème avec une requête sql
    Par bodysplash007 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 11/05/2007, 17h30
  3. [SQL] Problème avec une requête
    Par jcmskip dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/04/2007, 11h41
  4. [SQL] Problème avec script de pagination et requête sql sur deux tables
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h06
  5. [SQL] problème avec ma requête UPDATE
    Par carmen256 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 07/04/2006, 11h26

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