2015-11-02 3 views
1

J'ai deux tables. L'un d'entre eux contient des données utilisateur et l'autre des userGroups liés à des utilisateurs appartenant à un groupe. Les moyens comme un utilisateur peuvent être dans 0 ou plusieurs groupes.PL/SQL SELECT sur deux tables

Je suis en train d'obtenir cette colonne avec une requête utilisée comme ceci:

SELECT distinct(a.userID), a.userName, Count(b.userID_FID) 
FORM userData a, 
    userGroup b 
WHERE a.userID = b.userID_FID 

Mais en quelque sorte la partie Count me retournant un mauvais numéro. .

+1

données de la table de salon ou essayez 'Count (b.userID_FID distinct)' –

+0

essayez-vous d'obtenir le numéro de groupes pour chaque utilisateur? – jabs

+0

Vous avez besoin d'une jointure externe gauche pour les cas où un utilisateur est dans des groupes zéro. Est-ce que le compte est faux ou est-ce que cela a juste laissé un groupe d'utilisateurs dans les résultats? – shawnt00

Répondre

1
SELECT max(a.userName), Count(distinct b.userID_FID) 
FROM userData a 
JOIN userGroup b 
ON a.userID = b.userID_FID 
GROUP BY a.userID 

Ma suggestion est de ne pas utiliser de nombreuses tables avec de

+0

Aucun GROUP BY nécessaire? – jarlh

+0

oui, il doit y avoir GROUP BY. –

+0

Je ne pense pas qu'il y ait une colonne 'userID_FID' dans' a' à grouper. Et d'ailleurs, si vous regroupez cela, votre compte (par groupe) sera toujours un. – shawnt00

0

Cela vous obtiendrez le nombre de groupes chaque utilisateur est en Pour construire le scénario de test, utilisez ceci:
create table #Groupes (ID_utilisateur_int int , groupes int );

create table #user 
(userID int); 


insert into #groups values (1, 5); 
insert into #groups values (1, 2); 
insert into #groups values (1, 3); 
insert into #groups values (1, 4); 

insert into #groups values (2, 3); 
insert into #groups values (2, 4); 

insert into #groups values (3, 1); 
insert into #groups values (3, 5); 

insert into #user values (1); 
insert into #user values (2); 
insert into #user values (3); 

select * from #groups; 
select * from #user; 

Cette pièce est la requête que vous voulez, selon le scénario de test ci-dessus:

select userid, count(*) as NumberOfGroups 
from #groups g 
, #user u 
where g.userID_FID = u.userID 
group by userID;