Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
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 30/11/2011, 13h18   #1
Invité régulier
 
Inscription : décembre 2009
Messages : 53
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 53
Points : 8
Points : 8
Par défaut Sélectionner un objet ayant deux récurrences définies

Bonjour.
Voila, j'ai deux table, une table contenant mes tâches et une deuxième contenant les évènements de chaque tâche:

Table tâche:
-task_id: clé primaire
-title
-description
-last_event_id

Table événement:
-event_id:clé primaire
-task_id: clé étrangère
-event
-date
-error_code

Je voudrais ici récupérer toutes mes tâches contenant l'évènement START et l'évènement STOP, je ne veux pas les tâches n'ayant qu'un des deux évènement je veux bien les deux.
Comment puis je faire?
J'avais pensé mettre une condition "WHERE event='START' OR event='STOP'" pour compter ensuite le nombre de fois ou apparait cette tâche et ne garder que les tâches apparaissant deux fois, mais je trouve ça un peut archaïque. il doit bien y avoir un moyen plus simple.
Cyanatide est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 13h38   #2
Invité régulier
 
Inscription : décembre 2009
Messages : 53
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 53
Points : 8
Points : 8
Avec une double jointure entre les deux tables, c'est un peu mieux:
Code :
1
2
INNER JOIN event ev1 ON (task.task_id=ev1.task_id)
INNER JOIN event ev2 ON  (task.task_id=ev2.task_id)
Je suis preneur si il y a mieux.
Cyanatide est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 14h22   #3
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
Citation:
J'avais pensé mettre une condition "WHERE event='START' OR event='STOP'" pour compter ensuite le nombre de fois ou apparait cette tâche et ne garder que les tâches apparaissant deux fois, mais je trouve ça un peut archaïque. il doit bien y avoir un moyen plus simple.
Bonjour,

C'est pourtant une bonne idée ca vous évite 2 jointures.

Code :
1
2
3
4
 
SELECT a.task_id, a.title, a.description, a.last_event_id
FROM tache
INNER JOIN (SELECT task_id FROM evenement WHERE event IN('START', event='STOP') GROUP BY task_id HAVING count(DISTINCT event) = 2 ) b ON a.task_id = b.task_id
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 14h42   #4
Invité régulier
 
Inscription : décembre 2009
Messages : 53
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 53
Points : 8
Points : 8
Effectivement cela semble plus rapide avec la solution du COUNT.
Merci.
Cyanatide est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h46.


 
 
 
 
Partenaires

Hébergement Web