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

MySQL Discussion :

Récupérer seulement les lignes avec un id commun


Sujet :

MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 22
    Points : 10
    Points
    10
    Par défaut Récupérer seulement les lignes avec un id commun
    Bonjour,

    Je me suis rendu compte que j'ai posté ma demande dans le mauvais forum, je me permets donc de rouvrir une nouvelle discussion dans la bonne section et je m'en excuse.
    Pour mon souci, je ne sais pas si le titre est assez explicite par rapport à ma demande donc je vous expose ma situation.
    J'ai ma table, qu'on peut appelé list_gp, suivante :
     id   ctx_id  gp_nm   bt_id
    15129    8      L1      1
    15128    8      L2      1
    15130    8      L2      2
    15131    8      L1      2
    12960    8      L3      2
    15132    8      L2      3
    15133    8      L1      3
    15135    8      L1      4
    15134    8      L2      4
    12961    8      L3      5
    15136    8      L2      5
    15137    8      L1      5
    
    Ce que je souhaiterai faire, c'est juste lister toutes les lignes qui ont que 2 entrées identiques dans le champ bt_id (ex: pour bt_id=1, bt_id=2) et par la suite rajouter le gp_nm L3 avec le bt_id qui va bien à toutes les entrées (qui auront éventuellement été listées) qui n'en ont pas.

    J'espère être assez précis dans ma demande.
    J'ai réussi à lister ceux qui ont 2 valeurs grâce à un select count et un group by et having mais pas à le faire comme je le voudrai.

    Merci de votre aide.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Non, ce n'est pas clair !

    Donnez le résultat attendu à partir de vos données exemple.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    J'en étais presque sûr, désolé de la confusion.
    Clairement le résultat attendu est celui-ci :

    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
    id        ctx _id    gp_nm    bt_id
    15129    8          L1          1
    15128    8          L2          1
    12962    8          L3          1
    15130    8          L2          2
    15131    8          L1          2
    12960    8          L3          2
    15132    8          L2          3
    15133    8          L1          3
    12963    8          L3          3
    15135    8          L1          4
    15134    8          L2          4
    12964    8          L3          4
    12961    8          L3          5
    15136    8          L2          5
    15137    8          L1          5
    J'ai fait apparaître en gras et italique les lignes supplémentaires attendues que je souhaite pouvoir obtenir.
    En espérant que cela soit plus parlant.
    Merci

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si je comprends bien, tu veux ajouter une ligne avec gp_nm = L3 pour tous les bt_id qui ont strictement 2 lignes sans gp_nm = L3.

    1) Liste des bt_id qui ont strictement 2 lignes sans gp_nm = L3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ctx_id, bt_id
    FROM list_gp
    WHERE gp_nm <> 'L3'
    GROUP BY ctx_id, bt_id
    HAVING COUNT(*) = 2
    2) Ajout de la ligne avec gp_nm = L3 pour ces lignes, en supposant que id est auto-incrémenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO list_gp(id_ctx, bt_id, gp_nm)
    SELECT id_ctx, bt_id, 'L3'
    FROM list_gp
    WHERE gp_nm <> 'L3'
    GROUP BY id_ctx, bt_id
    HAVING COUNT(*) = 2
    Sauvegarder d'abord la BDD, tester le SELECT et vérifier qu'il n'y a bien que les lignes concernés. puis lancer l'INSERT et vérifier le résultat de l'INSERT.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    De façon beaucoup plus claire, c'est bien ça CinePhil

    J'ai essayé de mon côté, la requête select m'affiche bien mes boutons qui n'ont que 2 bt_id en retournant que la première entrée qu'il trouve.
    Id s'auto incrémente, je n'ai pas de souci à ce niveau là.
    Cependant le insert fonctionne bien, il rajoute bien les lignes pour avoir le gp_nm L3 et tout mais il rajoute également aux entrées qui ont déja L3 du coup ça me fait une duplication. Pour ça, je pense faire une requete s'il trouve une duplication, de m'en supprimer une des deux mais c'est pas très propre.
    Est-il possible de faire un test depuis le insert pour dire si la ligne existe déja, de ne pas la rajouter ?
    Mais ça a quand même pris en compte pour les autres.

    Merci beaucoup de ton aide.

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Cependant le insert fonctionne bien, il rajoute bien les lignes pour avoir le gp_nm L3 et tout mais il rajoute également aux entrées qui ont déja L3 du coup ça me fait une duplication
    OK. Il faut ajouter une condition dans la requête. Essaie celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT l1.ctx_id, l1.bt_id
    FROM list_gp l1
    WHERE gp_nm <> 'L3'
    	AND NOT EXISTS (
    		SELECT *
    		FROM list_gp l2
    		WHERE l2.ctx_id = l1.ctx_id
    			AND l2.bt_id = l1.bt_id
    			AND l2.gp_nm = 'L3'
    	)
    GROUP BY l1.ctx_id, l1.bt_id
    HAVING COUNT(*) = 2
    Et donc ensuite pour l'INSERT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    INSERT INTO list_gp(id_ctx, bt_id, gp_nm)
    SELECT l1.ctx_id, l1.bt_id, 'L3'
    FROM list_gp l1
    WHERE gp_nm <> 'L3'
    	AND NOT EXISTS (
    		SELECT *
    		FROM list_gp l2
    		WHERE l2.ctx_id = l1.ctx_id
    			AND l2.bt_id = l1.bt_id
    			AND l2.gp_nm = 'L3'
    	)
    GROUP BY l1.ctx_id, l1.bt_id
    HAVING COUNT(*) = 2
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    La cette fois-c ça marchei, tout est correct pour le select comme pour le insert, fait sur ma base de test. Merci.
    Il va s'agir pour moi maintenant de comprendre ses requêtes, comment elles sont formées car, étant relativement nouveau dans le domaine, faire des conditions sur des lignes, je ne savais pas.

    D'ailleurs, le select m'a même permis de voir qu'il y a des anomalies dans ma base de prod', il y a des valeurs qui apparaissent qui ne devraient pas être là, en même temps la requête m'affiche toutes les entrées ayant 2 bt_id identiques. Pour ça, je dois rajouter les conditions suivantes pour gp_nm='L0' et bt_id=0.

    Pour tous les bt_id=0, j'ai rajouté la condition suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    AND EXISTS (
    		SELECT * 
    		FROM list_gp
    		WHERE l1.bt_id!=0
    		)
    Par contre pour la condition où je ne veux pas qu'il me retourne chaque première ligne où il y a 2 bt_id identiques avec un gp_nm=L0, là j'ai pas réussi.

    Encore un grand merci de l'aide.

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Le ciel de ma compréhension de ton problème s'obscurcit de nouveau !

    Données exemples et résultat attendu si tu veux que je continue de t'aider.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Après une petite relecture de mes explications, il y a comme un petit manque de clarté, je m'en excuse et je reprend.

    Le select avant de passer insert affiche le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    id        ctx _id    gp_nm    bt_id
    15127    8          L0          0
    15129    8          L1          1
    15130    8          L2          2
    15132    8          L2          3
    15135    8          L1          4
    12961    8          L3          5
    15138    8          L0          6
    Pour revenir à mon message posté avant, j'ai réussi à ne pas afficher les valeurs dont bt_id=0 mais là où bt_id=6 par exemple, ça ne doit pas s'afficher car une des 2 valeurs à gp_nm=L0 (qui peut être également en 2e position dans la table) et retourner le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    15129    8          L1          1
    15130    8          L2          2
    15132    8          L2          3
    15135    8          L1          4
    12961    8          L3          5
    Pour ensuite passer le insert qui modifiera que les lignes qui sont affichées.

    J'espère apporter un peu plus d'éclaircissement

    Merci

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    j'ai réussi à ne pas afficher les valeurs dont bt_id=0
    Sauf que dans ton exemple de données, ça s'affiche !
    Cet exemple, ce sont des données brutes ou passées dans le filtre de la requête SELECT ?

    mais là où bt_id=6 par exemple, ça ne doit pas s'afficher car une des 2 valeurs à gp_nm=L0
    Quelle requête as-tu essayée ?

    Pour ensuite passer le insert qui modifiera que les lignes qui sont affichées.
    Euh... on insère ou on modifie ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Je n'ai pas reporté les modifications dans la requête complète.
    Le select que tu m'as donné, affiche les valeurs avec bt_id=0, j'ai donc rajouté un filtre à la requête, qui permet de ne plus afficher cela :

    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
    SELECT l1.ctx_id, l1.gp_nm, l1.bt_id
    FROM list_gp l1
    WHERE gp_nm <> 'test'
    	AND NOT EXISTS (
    		SELECT *
    		FROM list_gp l2
    		WHERE l2.ctx_id = l1.ctx_id 
    		AND l2.bt_id = l1.bt_id AND l2.gp_nm = 'test'
    		)
    	AND EXISTS (
    		SELECT * 
    		FROM list_gp
    		WHERE l1.bt_id!=0
    		)
    GROUP BY l1.ctx_id, l1.bt_id
    order by bt_id
    Ainsi, on obtient le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    id        ctx _id    gp_nm    bt_id
    15129    8          L1          1
    15132    8          L2          3
    15135    8          L1          4
    15138    8          L0          6
    Et là, j'ai ce souci où il me retourne la ligne avec gp_nm=L0 or je souhaiterai que ça ne soit pas prise en compte. Il y a le cas aussi où L0 est en deuxième position dans la table de la forme suivante :

    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
     
     id   ctx_id  gp_nm   bt_id
    15127    8      L0      0
    15129    8      L1      1
    15128    8      L2      1
    15130    8      L2      2
    15131    8      L1      2
    12960    8      L3      2
    15132    8      L2      3
    15133    8      L1      3
    15135    8      L1      4
    15134    8      L2      4
    12961    8      L3      5
    15136    8      L2      5
    15137    8      L1      5
    15138    8      L0      6
    15139    8      L1      6
    15140    8      L1      7
    15141    8      L0      7
    où la requête select, donnée ci-dessus, donnera le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    id        ctx _id    gp_nm    bt_id
    15129    8          L1          1
    15132    8          L2          3
    15135    8          L1          4
    15138    8          L0          6
    15140    8          L1          7
    Euh... on insère ou on modifie ?
    Je voulais bien dire insérer. Désolé, je me suis mal exprimer.

    J'espère répondre à toutes tes questions.

  12. #12
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Reprenons...

    Ma première compréhension de ton problème était la suivante :
    Citation Envoyé par CinéPhil
    Si je comprends bien, tu veux ajouter une ligne avec gp_nm = L3 pour tous les bt_id qui ont strictement 2 lignes sans gp_nm = L3.
    Et j'ai donné la requête suivante qui ne sélectionnait que les bt_id a seulement deux valeurs pour lesquelles gp_nm = L3 n'existait pas :
    Citation Envoyé par CinéPhil
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT l1.ctx_id, l1.bt_id
    FROM list_gp l1
    WHERE gp_nm <> 'L3'
    	AND NOT EXISTS (
    		SELECT *
    		FROM list_gp l2
    		WHERE l2.ctx_id = l1.ctx_id
    			AND l2.bt_id = l1.bt_id
    			AND l2.gp_nm = 'L3'
    	)
    GROUP BY l1.ctx_id, l1.bt_id
    HAVING COUNT(*) = 2
    De tes derniers messages, je comprends que les bt_id ne doivent pas avoir la valeur 0. Donc on doit sélectionner les bt_id ayant deux valeurs mais pas zéro et à ces valeurs sélectionnées ne doivent pas correspondre un gp_nom = 'L3'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT l1.ctx_id, l1.bt_id
    FROM list_gp l1
    WHERE bt_id <> 0
    	AND gp_nm NOT IN ('L0', 'L3')
    	AND NOT EXISTS (
    		SELECT *
    		FROM list_gp l2
    		WHERE l2.ctx_id = l1.ctx_id
    			AND l2.bt_id = l1.bt_id
    			AND l2.gp_nm = 'L3'
    	)
    GROUP BY l1.ctx_id, l1.bt_id
    HAVING COUNT(*) = 2
    Est-ce que c'est bon cette fois ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  13. #13
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Désolé de mon retour tardif...

    A la base, ce que je souhaitais avoir était bien ce que tu avais compris.
    Mais en appliquant la requête que tu m'avais donné dans un premier temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT l1.ctx_id, l1.bt_id
    FROM list_gp l1
    WHERE gp_nm <> 'L3'
    	AND NOT EXISTS (
    		SELECT *
    		FROM list_gp l2
    		WHERE l2.ctx_id = l1.ctx_id
    			AND l2.bt_id = l1.bt_id
    			AND l2.gp_nm = 'L3'
    	)
    GROUP BY l1.ctx_id, l1.bt_id
    HAVING COUNT(*) = 2
    Je me suis rendu compte que j'avais des résultats qui ne devaient pas apparaître dans ce que me retournait la requête, toutes les lignes où bt_id=0 et/où gp_nm=L0, c'est pourquoi il fallait avoir des filtres supplémentaires.

    En appliquant la dernière requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT l1.ctx_id, l1.bt_id
    FROM list_gp l1
    WHERE bt_id <> 0
    	AND gp_nm NOT IN ('L0', 'L3')
    	AND NOT EXISTS (
    		SELECT *
    		FROM list_gp l2
    		WHERE l2.ctx_id = l1.ctx_id
    			AND l2.bt_id = l1.bt_id
    			AND l2.gp_nm = 'L3'
    	)
    GROUP BY l1.ctx_id, l1.bt_id
    HAVING COUNT(*) = 2
    J'obtiens bien le résultat attendu.

    Un grand merci de ton aide et pour ta patience.

  14. #14
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    C'est donc ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  15. #15
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Yes c'est bel et bien résolu.
    Merci beaucoup pour ton aide

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/07/2014, 17h14
  2. Seulement les lignes entres 2 expressions ( Avec / )
    Par Ivelios dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 16/04/2013, 17h53
  3. Réponses: 5
    Dernier message: 23/05/2011, 15h50
  4. Réponses: 5
    Dernier message: 24/06/2008, 13h07

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