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

MS SQL Server Discussion :

Problème de Requete


Sujet :

MS SQL Server

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Problème de Requete
    Bonjour,

    Cela devrait vous paraitre très simple mais bon

    suppossons la table "LINK_DOC_APPLI" avec les données suivantes :

    id_doc - appli
    1 - A
    1 - B
    1 - C
    2 - A
    3 - B

    Je voudrais la requete qui permettre d'extraire de cette tables les lignes pour lesquelles id_doc a une valeur de appli égale à A et B.

    Par conséquent, le resultat attendu est les trois premières lignes.


    Merci

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Salut,

    Essaye ceci, cela récupère les valeurs d'appli qui sont soit A ou B :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_doc, appli
    FROM TaTable
    WHERE appli = 'A' OR appli = 'B'

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par guigui11
    Salut,

    Essaye ceci, cela récupère les valeurs d'appli qui sont soit A ou B :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_doc, appli
    FROM TaTable
    WHERE appli = 'A' OR appli = 'B'

    Bonjour,

    Merci, en fait la requete que tu proposes ne retourne pas ce que je veux puisque je vais recuperer les valeurs id_doc =2 et id_doc =3.

    C'est comme si je faisais :


    SELECT id_doc, appli
    FROM MaTable
    WHERE appli IN ('A','B')

    J'aurai tous les id_doc lesquelles ID_APPLI = A ou B, alors qu'en fait je veux les id_doc pour lesquels ID_APPLI = A ET B donc seul le id_doc = 1 répond aux critères dans la liste.

    EN tout cas merci pour cette première réponse,

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Salut,

    effectivement, j'avais mal compris ton problème
    Essaye plutôt ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT TB1.id_doc
    FROM TaTable TB1, (SELECT id_doc FROM TaTable WHERE appli = 'A') TB2,
    (SELECT id_doc FROM TaTable WHERE appli = 'B') TB3
    WHERE TB1.id_doc = TB2.id_doc
    AND TB1.id_doc = TB3.id_doc
    GROUP BY TB1.id_doc
    En espérant que ça réponde à ton problème

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par guigui11
    Salut,

    effectivement, j'avais mal compris ton problème
    Essaye plutôt ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT TB1.id_doc
    FROM TaTable TB1, (SELECT id_doc FROM TaTable WHERE appli = 'A') TB2,
    (SELECT id_doc FROM TaTable WHERE appli = 'B') TB3
    WHERE TB1.id_doc = TB2.id_doc
    AND TB1.id_doc = TB3.id_doc
    GROUP BY TB1.id_doc
    En espérant que ça réponde à ton problème

    Salut ben oui c nickel merci,

    enfin en tout cas ca retourne le bon resultat, après c'est par rapport à ce que je dois en faire que cela reste compliqué mais c'est un autre problème !

    Disons que le problème est une appli qui offre un requeteur aux utilisateur, l'appli construit la requete en ajoutant des restrictions dans la clause WHERE.

    Donc si on reprend l'exemple ci-dessus la requete construite était :


    SELECT * FROM MaTable WHERE appli = 'A' and appli = 'B' donc forcement une requete qui retourne 0 lignes, pourtant l'utilisateur qui fait la requete se plaint en disant qu'il a effectivement des objets rattachés à l'application A et à l'application B ce qui est vrai.

    Par contre la requete que tu m'as donné fonctionne, la galère va être pour construire cela en dynamique puisque pour l'instant le select etait statique, le from aussi, et uniquement la clause where était dynamique.

    Donc si je cromprends bien ,cela ne convient pas à tous les cas, il faut analyser la requete et la construire differement en fonction de la logique entre les attributs .... priuse de tete tout çà

    En tout cas merci bcp !!

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Tu aurais pu construire ta requête comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT TB1.id_doc
    FROM Doc TB1
    WHERE TB1.id_doc IN (SELECT id_doc FROM Doc WHERE appli = 'A')
    AND TB1.id_doc IN (SELECT id_doc FROM Doc WHERE appli = 'B')
    GROUP BY TB1.id_doc
    Mais dans ton cas tu es obligé d'utiliser des sous-requêtes, je te souhaites bon courage pour la suite

Discussions similaires

  1. [EJBQL] Problème de requete
    Par rivierem dans le forum Java EE
    Réponses: 3
    Dernier message: 16/10/2004, 10h05
  2. Problème sous requete MySQL
    Par gavelin dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/07/2004, 10h36
  3. Problème de Requete...
    Par sebiv dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/04/2004, 16h21
  4. Problème de requete avec Innodb
    Par silef dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/04/2004, 12h54
  5. Problème de requete multis-selections
    Par tripper.dim dans le forum SQL
    Réponses: 9
    Dernier message: 03/09/2003, 13h08

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