Mysql - Recuperer les enregistrement répondant à un Array

Résolu
jordane45 Messages postés 38205 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 12 juin 2024 - 14 févr. 2014 à 18:46
jordane45 Messages postés 38205 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 12 juin 2024 - 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 ?





3 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
17 févr. 2014 à 21:33
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...
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
17 févr. 2014 à 21:36
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...
0
jordane45 Messages postés 38205 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 12 juin 2024 344
19 févr. 2014 à 01:15
Merci bien.
Je vais tester ça rapidement
0
Rejoignez-nous