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

jordane45 19710 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 18 janvier 2018 Dernière intervention - 14 févr. 2014 à 18:46 - Dernière réponse : jordane45 19710 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 18 janvier 2018 Dernière intervention
- 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

Répondre au sujet
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 17 févr. 2014 à 21:33
0
Utile
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
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 17 févr. 2014 à 21:36
0
Utile
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
jordane45 19710 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 18 janvier 2018 Dernière intervention - 19 févr. 2014 à 01:15
0
Utile
Merci bien.
Je vais tester ça rapidement
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.