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 sur une requête imbriquée


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 26
    Points : 17
    Points
    17
    Par défaut Problème sur une requête imbriquée
    Bonjour,

    J'ai un problème concernant une requête imbriquée.
    J'ai une table de données TDonnee définie par un id et un libellé.
    j'ai une table TType définie par un id et un libellé.
    J'ai enfin une table TTypeDonnee définie par une idDonnee et un idType.

    Je souhaiterais faire une requête qui me permette de retrouver le libellé des données dont les types sont tous vérifiés (réponse en "ET")

    J'ai tenté de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select Tdonnee.libelle from tdonnee join TTypeDonnee on TDonnee.id = TTypeDonnee.idDonnee where id IN (select idType from TTypeDonnee join TType on TTypeDonnee.idType = TType.id where TType.libelle = 'Personne' or TType.libelle = 'Configuration' or TType.libelle = 'Nom')
    Seulement cette requête me renvoie toutes les données en faisant un "OU" alors que je voudrais faire un "ET"

    Pouvez-vous m'aider ?
    Merci d'avance pour vos réponses.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Désolé mais autant je pense avoir compris comment s'articulent vos tables, autant je ne comprends pas ce que vous cherchez à faire
    Pouvez vous présenter un cas concret avec un exemple de quelques données en entrée, et le résultat attendu

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Merci pour votre réponse, en effet, ce n'est peut-être pas clair.

    Donc par exemple, dans la table TDonnee
    Id Libelle
    1 Marc
    2 Dupont
    3 Théo
    4 45

    Pour la table TType
    Id Libelle
    1 Nom
    2 Prénom
    3 Age
    4 Personne

    Pour la table TTypeDonnee, par exemple,
    IdDonnee idType
    1 2
    1 4
    2 1
    2 4

    Et moi, je veux chercher les données dont les types sont "Personne" ET "Prénom"
    le nombre de types n'est pas figé donc les join multiples ne sont pas forcément applicables

    Merci pour vos réponses.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ...
    FROM   ...
    WHERE  Libelle IN ('Personne', 'Prénom')
    GROUP  BY ...
    HAVING COUNT(DISTINCT Libelle) >= 2
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    D'accord, voici 2 possibilités

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Select DO.Id 
          ,DO.Libelle
    From Tdonnee as DO
    inner join TTypeDonnee as TD
       on TD.IdDonnee = DO.Id
    Where exists
         (select 1 from TType as TT
          where  TT.id      = TD.IdType
            and  TT.libelle = 'Personne')
     and exists
         (select 1 from TType as TT
          where  TT.id      = TD.IdType
            and  TT.libelle = 'Personne')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Select DO.Id 
          ,DO.Libelle
    From Tdonnee           as DO
    inner join TTypeDonnee as TD
       on TD.IdDonnee = DO.Id
    inner join Ttype       as TT1
       on TT1.id      = TD.Idtype
      and TT1.Libelle = 'Personne'
    inner join Ttype       as TT2
       on TT1.id      = TD.Idtype
      and TT1.Libelle = 'Prenom'

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ...
    FROM   ...
    WHERE  Libelle IN ('Personne', 'Prénom')
    GROUP  BY ...
    HAVING COUNT(DISTINCT Libelle) >= 2
    A +
    Merci beaucoup, cela fonctionne

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

Discussions similaires

  1. problème sur une requête imbriquée MATCH
    Par titiplanti dans le forum Requêtes
    Réponses: 0
    Dernier message: 21/09/2010, 15h16
  2. Problème sur une requête imbriquée
    Par slake13 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/03/2009, 21h46
  3. problème sur une requête imbriquée
    Par pbatty1 dans le forum Requêtes
    Réponses: 12
    Dernier message: 26/10/2007, 17h21
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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