Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/07/2011, 22h38   #1
Invité de passage
 
Inscription : novembre 2004
Messages : 8
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : novembre 2004
Messages : 8
Points : 1
Points : 1
Par défaut Requete union et join

Bonjour,

Je souhaiterais trouver une requete pour faire une recherche dans plusieurs table et avoir une condensé de résultats;

Je vais essayer d'expliquer le plus clairement possible.

Table1
- id1
- status
-autres champs...

Table2
-id2
-cle_id2
-date

Table3
-id3
-cle_id3
-date

donc pour chaque enregistrement Table1.id1 WHERE status > 0

je souhaite récupérer une ligne avec :
-Table1.autres champs
-COUNT(Table2.cle_id2) WHERE year(Table2.date) =2011 avec cle_id2=Table1.id1
-COUNT(Table3.cle_id3) WHERE year(Table3.date) =2011 avec cle_id3=Table1.id1

J'espère que mon explication est compréhensible.

Merci de votre aide

Vincnet68
vincnet68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 23h03   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Le problème est de récupérer toutes les colonnes de table1, ça oblige à utiliser des sous-requêtes pour les count, quelque chose comme :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT t1.*, nb_t2, nb_t3
  FROM table1 t1
  JOIN (SELECT cle_id2, count(*) AS nb_t2
          FROM table2
         WHERE year(date2) = 2011
         GROUP BY cle_id2
       ) t2 ON t2.cle_id2 = t1.id1
  JOIN (SELECT cle_id3, count(*) AS nb_t3
          FROM table3
         WHERE year(date3) = 2011
         GROUP BY cle_id3
       ) t3 ON t3.cle_id3 = t1.id1
 WHERE t1.STATUS = 0
Si besoin utilise des jointures externes, LEFT JOIN à la place de JOIN.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h32.


 
 
 
 
Partenaires

Hébergement Web