Select count(*) et “join” de plus de 3 tables
Je suis à la recherche pour un nombre de requête dans une jointure de 3 tables qui peut me faire des comptages sur des valeurs distinctes de l'une de ces tables.
J'ai 3 tables que j'ai besoin de les joindre pour obtenir les données attendues (Workflow
, Message
et Message_Workflow_Relation
).
Je veux obtenir le nombre de flux de travail regroupées par état + un champ de l'connectés Message
table dans mon résultat (related_name
). Connexes nom doit être prise à partir d'entrées où l' adapter
champ est égal à wf
, cependant il y a parfois plus d'un enregistrement de Message correspondant à cette condition, ce qui se traduira par plus de jeux de données dans mon décompte de ceux qui sont vraiment là.
Je suis assez sûr il doit être possible de sortir de la , mais il suffit de ne pas le faire fonctionner.
Malheureusement je ne peux pas changer la structure de la table comme c'est un schéma d'un produit que nous utilisons.
Mon tableau de structure ressemble à ceci:
Processus:
id | workflow_id | starttime | endtime | status
------------------------------------------------------
1 | 22 | 0 | 200 | OK
2 | 23 | 220 | 920 | ERROR
3 | 55 | 202 | 588 | OK
Message_Workflow_Relation:
id | message_id | workflow_id |
-------------------------------
1 | 122 | 22 |
2 | 235 | 22 |
3 | 456 | 22 |
4 | 982 | 22 |
5 | 444 | 23 |
6 | 445 | 23 |
7 | 585 | 55 |
8 | 738 | 55 |
9 | 399 | 55 |
Message:
id | message_id | starttime | endtime | adapter | related_name |
----------------------------------------------------------------
1 | 122 | 0 | 2335 | wf | workflow_1 |
2 | 235 | 222 | 1000 | other | other |
3 | 456 | 343 | 2330 | another | another |
4 | 982 | 222 | 2200 | wf | workflow_1 |
5 | 444 | 2223 | 3333 | wf | workflow_2 |
6 | 445 | 1123 | 1244 | manual | manual |
7 | 585 | 5555 | 5566 | wf | workflow_1 |
8 | 738 | 655 | 999 | wf | worfklow_1 |
9 | 399 | 6655 | 7732 | another | another |
Il doit retourner le résultat suivant:
count(*) | related_name | status |
----------------------------------
2 | workflow_1 | OK |
1 | workflow_2 | ERROR |
Je suis coincé avec cette déclaration suivante, mais je ne suis pas sûr de savoir comment
faire la sélection sur la adapter = wf unique
pour chaque flux de travail:
select distinct
count(*),
m.related_name,
w.status
from
workflow as w,
message as m,
msg_bpm_rel as rel
where rel.workflow_id = w.workflow_id
and rel.message_id = m.message_id
and m.adapter = 'PE'
group by m.related_name,w.status
Cela me renvoie (4 workflow_1
au lieu de 2):
count(*) | related_name | status |
----------------------------------
4 | workflow_1 | OK |
1 | workflow_2 | ERROR |
Comment puis-je faire une requête appropriée pour y parvenir?
Toute aide appréciée.
OriginalL'auteur Sebastian | 2011-03-01
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire par le groupement et le comptage d'une valeur distincte.
Donc quelque chose comme:
C'est non testé mais devrait fonctionner je crois 🙂
OriginalL'auteur F.B. ten Kate
Ma première tentative à l'obtention de la requête au travail. Je n'aime pas avoir à utiliser l'distinctes. Ça me fait penser il y a encore quelque chose de mal:
Ce qui est important à noter est la façon dont le comptage est effectué à cette requête. Vous avez été tout simplement le regroupement sur deux colonnes, ce qui est arrivé à être dans la partie SELECT de l'instruction SQL. La réalité est que de compter ce que vous vouliez, vous avez de groupe par le flux de travail l'identification seulement. Cette requête ne qui et ajoute ensuite que le résultat d'une autre requête pour afficher ce que tu voulais.
OriginalL'auteur Stephen Perelson
Ce qui est important à noter est la façon dont le comptage est effectué à cette requête. Vous avez été tout simplement le regroupement sur deux colonnes, ce qui est arrivé à être dans la partie SELECT de l'instruction SQL. La réalité est que de compter ce que vous vouliez, vous avez de groupe par le flux de travail l'identification seulement. Cette requête ne qui et ajoute ensuite que le résultat d'une autre requête pour afficher ce que tu voulais.
OriginalL'auteur Sukhdeep Singh