Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête pour les utilisateurs n'appartenant pas à un groupe spécifique ? (Je voulais utiliser SAUF mais il semble que MySQL ne le supporte pas)

Vous pouvez utiliser un NOT IN() , ou un <> ANY()

SELECT CaseId
FROM CaseIdUsers
WHERE CaseID NOT IN (
  SELECT CaseId 
  FROM CaseIdUsers
    JOIN GroupMembers ON GroupMembers.User = CaseIdUsers.Sid
    JOIN Groups ON GroupMembers.Group = Groups.Sid
  WHERE Groups.Name = 'MyGroupName'
)

Alternativement, vous pouvez utiliser un LEFT JOIN avec un GROUP BY

SELECT CaseId 
FROM CaseIdUsers
  LEFT JOIN GroupMembers ON GroupMembers.User = CaseIdUsers.Sid
  LEFT JOIN Groups ON GroupMembers.Group = Groups.Sid
    AND Groups.Name = 'MyGroupName'
HAVING COUNT(Groups.Sid) = 0