2
我有很多的用戶和組之間的多對多關係:查詢不在特定組中的用戶? (本來是想區別在於使用,但它似乎MySQL不支持它)
CREATE TABLE IF NOT EXISTS `SecurityIdentifiers` (
`Guid` char(36) NOT NULL,
PRIMARY KEY (`Guid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `CaseIdUsers` (
`Sid` char(36) NOT NULL,
`Acl` int(11) NOT NULL,
`FirstName` varchar(45) NOT NULL,
`LastName` varchar(45) NOT NULL,
`CaseID` varchar(8) NOT NULL,
PRIMARY KEY (`Sid`),
UNIQUE KEY `CaseID_UNIQUE` (`CaseID`),
KEY `fk_CaseIDUsers_AccessControlLists1` (`Acl`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `GroupMembers` (
`User` char(36) NOT NULL,
`Group` char(36) NOT NULL,
PRIMARY KEY (`User`,`Group`),
KEY `fk_Groups_has_SecurityIdentifiers_SecurityIdentifiers1` (`User`),
KEY `fk_Groups_has_SecurityIdentifiers_Groups1` (`Group`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `Groups` (
`Sid` char(36) NOT NULL,
`Acl` int(11) NOT NULL,
`Name` varchar(45) NOT NULL,
`Description` varchar(255) NOT NULL,
PRIMARY KEY (`Sid`),
UNIQUE KEY `Name_UNIQUE` (`Name`),
KEY `fk_Groups_Access Control Lists1` (`Acl`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我需要找到所有誰在一個特定的不是用戶組。我想做類似的事情:
SELECT CaseId FROM CaseIdUsers
EXCEPT
SELECT CaseId FROM CaseIdUsers
JOIN GroupMembers ON GroupMembers.User = CaseIdUsers.Sid
JOIN Groups ON GroupMembers.Group = Groups.Sid
WHERE Groups.Name = 'MyGroupName'
但是MySQL不支持EXCEPT
。現在我該怎麼做?
第一個查詢不起作用。它返回組MyGroupName中的用戶,如果他們恰好位於另一個組中。 – 2011-02-14 20:58:17