2012-12-12 2 views
1

je dois choisir une table qui ont une table de jointuresql.limit sur le nombre de tables liées

par exemple il y a des tables:

Role,AccountRole,Account 
AccountRole - many to many relationship 

besoin de sélectionner le rôle qui a un compte

Role table 
id name 
1 admin 
2 user 
3 external 

Account table 
id name 
1 homer 
2 jessica 
3 simpson 

AccountRole table 
account_id role_id 
1   1 
1   2 
2   2 
3   3 

requête:

SELECT role.id  
FROM Role role 
     INNER JOIN AccountRole accRole 
      ON accRole.role_id = role.id 

     INNER JOIN Account acc 
      ON accRole.account_id = acc.id 

GROUP BY role.id 
HAVING COUNT(*) = 1 

dans le résultat de la requête:

role.id 
2 
3 

mais j'ai besoin role.id qui role.name = "externe" (en l'occurrence role.id = 3, mais pas 2)

comment faire cela

Répondre

1
SELECT a.ID -- change this to the original name of your Role Column 
FROM Role a 
     INNER JOIN AccountRole b 
      ON a.RoleID = b.RoleID -- an assumption that their linking 
            -- column name is RoleID 
     INNER JOIN Account c 
      ON b.AccountID = c.AccountID -- an assumption that their linking 
             -- column name is AccountID 
GROUP BY a.ID 
HAVING COUNT(*) = 1 
+0

merci.Comment ajouter une condition sur le nom du compte? – MaksiK

+0

quelle condition voulez-vous? –

+0

exemple: où c.name = 'compte1'. mais si j'ajoute cette condition, l'ensemble de résultats a des rôles, qui ont plus d'un compte – MaksiK

Questions connexes