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 :

[Access] select champs dont valeur = X et valeur = Y


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut [Access] select champs dont valeur = X et valeur = Y
    Bonjour,

    Voici mon probleme. Je pense avoir un peu de mal avec sql :
    j'ai 2 tables t1 et t2
    t1 a les champs id, nom, prenom
    t2 a id_t2, id, id_type, valeur

    Dans la table t2, on peut avoir par exemple :
    id_t2 = 1
    id = 1
    id_type = X

    et aussi
    id_t2 = 1
    id = 1
    id_type = Y

    J'aimerai rechercher les personnes de t1 dont les id_type soient comprises dans la liste (X, Y, Z...).
    Avec OR ma requete retourne les resultats si une des valeurs est comprise dans la liste
    Avec And, ma requete ne me retourne rien si je mets : id_type = X et id_type = Y
    J'aimerai que toutes les valeurs de la liste soient vérifiées...

    Quelle est alors ma requete SQL ???
    Merci pour votre aide...
    PS : je travaille sur Access

  2. #2
    Membre averti Avatar de Rei Angelus
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2006
    Messages : 292
    Points : 356
    Points
    356
    Par défaut
    As-tu essayé avec IN (si cela fonctionne sous ACCESS) ?

    Pourrais-tu nous mettre ta requête, SVP ?

  3. #3
    Membre du Club Avatar de zin_rbt
    Inscrit en
    Février 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 68
    Points : 45
    Points
    45
    Par défaut
    bonjour
    si j ai bien compris le schema : id est le champ qui constitue la jointure entre les 2 tables t1 et t2 .
    Or :fera l affaire mais pas AND puisque id_type ne peut pas etre egale a toutes les valeurs (X,Y,Z ...) a la fois
    ta requette sera 'enfin j espere ' comme suit :

    SELECT t1.* FROM t1,t2 WHERE
    t1.id = t2.id and
    t2.id_type in (X,Y,Z...)

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    En fait le Or ne permet pas non plus d'obtenir ce que je souhaite.
    Lorsque id_type = X mais pas à Y, je n'ai pas les resultats obtenus.

    il me faut les resultats avec id_type = X et id_type = Y...

    Je ne sais pas s'il faut chercher vers les requetes imbriquees... mais j'ai pas tout compris encore de ces requetes...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Et j'ai oublie de rajouter : le IN est équivalent à OR non ???

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    sql = "SELECT Distinct t1.Id, t1.Nom, t1.Prenom " & _
        "FROM ((t1 " & _
        "LEFT JOIN Outils ON t1.Id = Outils.Id)) "
     
    ...
     
    For i = 0 To listOutils.ListCount - 1
        If Me.listOutils.Selected(i) Then
            str2 = str2 & "OR Outils![Code_Outils] = " & Me.listOutils.Column(0, i) & " " 
        End If
    Next i
    If Not str2 = "" Then
        str2 = "And (" & Mid(str2, 3) & ") "
        SQLWhere = SQLWhere & str2
    End If
     
    ...
     
    sql = sql & "WHERE t1.Id <> 0 " & str2
    j'ai enleve du code car ca ne devrait pas être interessant ici
    J'ai essayé avec And, Or et quelques requetes imbriquées, en esperant bien les utiliser.
    mais je n'ai pas le resultat voulu

  6. #6
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    Citation Envoyé par ancylia
    Et j'ai oublie de rajouter : le IN est équivalent à OR non ???
    Non ce n'est pas équivalent, le OR permet de faire un condition sur un OU ( soit a soit b en condition) le IN permet de mettre une "liste de valeur" (A,B,C,etc en condition) il peut vérifier la condition pour plusieurs valeurs en meme temps.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    OK apparemment il n'y a pas de moyens "directs" pour faire cela...
    je fais essayer de passer par un autre moyen.

    Merci à tous

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 384
    Points
    28 384
    Par défaut
    Si tu construis ta requête de manière dynamique, tu peux faire comme ça, en enregistrant la liste de valeurs et le nombre de valeurs de la liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select    t1.*
    where    exists    
            (    select    1
                from    t2
                where    t2.id_t1 = t1.id_t2
                    and    id_type in (liste)
                having    count(*) = nombre
            )
    ;

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 384
    Points
    28 384
    Par défaut
    Tu peux aussi passer par une petite table temporaire, dans laquelle tu enregistres la liste des id_type que tu veux tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select  t1.*
    where   exists    
            (   select    1
                from    t2
                    inner join
                        tmp
                        on    t2.id_type = tmp.id_type
                where   t2.id_t1 = t1.id_t2
                having  count(*) = (select count(*) from tmp)
            )
    ;

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/02/2014, 13h28
  2. Réponses: 1
    Dernier message: 02/03/2010, 17h49
  3. [AC-2003] Requête Access sur champ dont les données sont effacées
    Par Florentin dans le forum IHM
    Réponses: 4
    Dernier message: 15/06/2009, 10h19
  4. select : selectionner l'option dont on connait la valeur
    Par vasilov dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/12/2008, 19h03
  5. Access 2007 - champs à plusieurs valeurs
    Par kvoskol dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 27/08/2007, 18h06

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