Mysql - Recuperer les enregistrement répondant à un Array [Résolu]

Signaler
Messages postés
29170
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 août 2020
-
Messages postés
29170
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 août 2020
-
Bonjour,

Je vous sollicite sur la chose suivante :

Je dispose de deux tables :
Table1 : id_tbl1 | nom
Table2 : id_tbl2| Libelle | Type | id_tbl1

La Table2 peut contenir 1 à N enregistrements rattachés à la Table1
(appelons les des Items ) de même 'type' ou de 'type' différent.

Exemple :
Table1 :
1 | TEST
2 | FOO
3 | BAR

Table2:
1 | Excel | A |1
2 | Word | A |1
3 | Excel | A |2
4 | Eclipse | A |3
5 | Excel | A |3
6 | Excel | A |3

Je souhaites pouvoir lister Les éléments de ma Table1 qui, dans la Table2 contiennent Excel ET Word.
C'est à dire : TEST et BAR

L'utilisation du Table2.Libelle IN ('Word','Excel') dans le Where permet de ne faire qu'un OR et me sort tous les enregistrements qui ont pour valeur Excel OU word... mais pas ceux qui ONT au moins les deux uniquement.


Auriez-vous une petite idée ?





3 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
18
Salut,

en SQL-Server on pourrait faire quelque chose comme ça :

Selectionne les lignes de t1 pour lesquelles il existe au moins 2 lignes dans t2 de type Word et Excel

SELECT t1.* FROM Table1 t1
WHERE exists(
        SELECT count(0), t2.id_tbl1 
        FROM Table2 t2 
        WHERE t2.Libelle in ('Word','Excel') 
            and t2.id_tbl1 = t1.id_tbl1 
        GROUP BY t2.id_tbl1 
        HAVING(count(0) >= 2)


bye...
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
18
non pardon, il faut ajouter un critère d'unicité en plus,

count(distinct t2.Libelle)

SELECT t1.* FROM Table1 t1
WHERE exists(
        SELECT count(distinct t2.Libelle), t2.id_tbl1 
        FROM Table2 t2 
        WHERE t2.Libelle in ('Word','Excel') 
            and t2.id_tbl1 = t1.id_tbl1 
        GROUP BY t2.id_tbl1 
        HAVING(count(distinct t2.Libelle) >= 2


bye...
Messages postés
29170
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 août 2020
335
Merci bien.
Je vais tester ça rapidement