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 :

Besoin d'avis pour une requête


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 68
    Points : 38
    Points
    38
    Par défaut Besoin d'avis pour une requête
    Bonjour tout le monde,

    J'ai une table comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ------------------------
        Col1    |    Col2    
    ------------------------
          A           1
          B           2
          A           2
          C           1
          D           3
    Biensûr cet exemple n'est pas exhaustif et je dispose d'autres champs et enregistrements.

    Sur cette exemple je souhaite récupérer les valeur ce Col1 qui sont communes pour les différentes valeurs de Col2. Soit le premier et le troisième enregistrement.

    Merci d'avance !

  2. #2
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    Bonjour,

    Quelque chose comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COL1, COL2 FROM T
    WHERE COL1 IN (SELECT COL1 FROM T GROUP BY COL1 HAVING COUNT(*) > 1)

  3. #3
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    J'avais mal compris votre besoin.

    En ajoutant une condition sur COL2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COL1, COL2 FROM T
    WHERE COL1 IN (SELECT COL1 FROM T WHERE COL2 IN (1,2) GROUP BY COL1 HAVING COUNT(*) > 1);
    COUNT(*)>1 pourrait du coup être remplacé par COUNT(*)=2.

    Un autre solution (plus facile à lire, à voir ce qui est plus performant) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT COL1, COL2
    FROM T t1
    WHERE EXISTS (SELECT 1 FROM T t2 WHERE t1.COL1 = t2.COL1 AND COL2 = 1)
    AND EXISTS (SELECT 1 FROM T t2 WHERE t1.COL1 = t2.COL1 AND COL2 = 2);
    Edit : vous avez supprimé votre second message ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 68
    Points : 38
    Points
    38
    Par défaut
    Oui désolé j'ai supprimer mon message car en l'écrivant je me suis rendu compte de l'utilité du count !

    Du coup de réétudie la requête que vous m'avez proposé !

    Pour le deuxième qui est plus facile à lire et voir, c'est vrai mais le nombre d'arguments dans le in de Col2 est variable et peut être assez important du coup je vais avoir un grand nombre de clauses EXISTS à concaténer

  5. #5
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    D'accord, je vous laisse réfléchir par vous-même à partir de ces deux requêtes.

    Si vous bloquez, n'hésitez pas à demander un coup de main en postant la requête à laquelle vous êtes parvenu. Détaillez peut-être aussi davantage votre besoin car je ne suis toujours pas certain d'avoir bien compris (donnez un exemple complet avec des vraies données).

    Bon courage

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 68
    Points : 38
    Points
    38
    Par défaut
    Merci beaucoup pour votre aide !

    Que pensez-vous de cette requête ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select Col1 from T 
    where Col2 in (1, 2) 
    group by Col1 having count(*)=(select count(*) from (select distinct Col2 from T where Col2 in (1, 2)))

  7. #7
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    Elle me parait bien tirée par les cheveux

    La requête que j'ai donné précédemment ne correspond pas à votre besoin ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COL1, COL2 FROM T
    WHERE COL1 IN (SELECT COL1 FROM T WHERE COL2 IN (1,2) GROUP BY COL1 HAVING COUNT(*) > 1);
    Si ce n'est pas le cas, pouvez-vous précisez ce que vous voulez faire ? Je ne dois pas avoir bien compris.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 68
    Points : 38
    Points
    38
    Par défaut
    Désolé pour mon imprécision.

    Je reprends depuis le début.
    Je récupère une variable de l'exterieur, mettons IDS.

    Avec votre requête et mon besoin ça donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT COLUMN_NAME FROM TABLE_COLUMNS
    WHERE  ENTITY_ID IN (IDS)
    AND COLUMN_NAME IN (SELECT COLUMN_NAME FROM TABLE_COLUMNS WHERE ENTITY_ID IN (IDS) GROUP BY COLUMN_NAME HAVING COUNT(*) = (ici doit venir le nombre de ENTITY_ID que je reçois dans IDS));
    Ici je veux récupérer tous les COLUMN_NAME qui sont strictement communs aux ENTITY_ID que je reçois par ma variable IDS.

    J'espere que j'ai préciser un peu le besoin.

    Merci

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select col_1
    from ma_table
    where col_2 in ('X', 'Y', 'Z')
    group by col_1
    having count(distinct col_2) = 3

  10. #10
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 151
    Points : 7 399
    Points
    7 399
    Billets dans le blog
    1
    Par défaut
    Merci punkoff pour avoir posté la première requête de ce topic sans sous-requête inutile !
    On ne jouit bien que de ce qu’on partage.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 68
    Points : 38
    Points
    38
    Par défaut
    Bonjour Punkoff,

    Merci pour la réponse qui sans hésitation est moins tirée par les cheveux que la mienne comme me l'a dit Florent

    Merci à vous deux et bien évidement ça répond à mon problème !

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

Discussions similaires

  1. Besoin d'aide pour une requête de MAJ (modif. de car.)
    Par ptitscrat dans le forum Access
    Réponses: 5
    Dernier message: 22/03/2006, 17h27
  2. besoin d'aide pour une requête
    Par lipao17 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/01/2006, 16h55
  3. Besoin d'aide pour une requête SQL
    Par Borami dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/11/2005, 10h33
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

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