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

Messages postés
26807
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 novembre 2019
- - Dernière réponse : jordane45
Messages postés
26807
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 novembre 2019
- 19 févr. 2014 à 01:15
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 ?





Afficher la suite 

3 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
17
0
Merci
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...
Commenter la réponse de yann_lo_san
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
17
0
Merci
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...
Commenter la réponse de yann_lo_san
Messages postés
26807
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 novembre 2019
317
0
Merci
Merci bien.
Je vais tester ça rapidement
Commenter la réponse de jordane45