我有一个sql数据库,其中包含一个包含用户的表(UserID,Name),一个包含事件的表(EventID,EventName),一个包含角色的表(RoleID,RoleName)和一个为每个事件分配用户角色的表(assignID ,EventID,UserID,RoleID)。
现在我想获得一个不包含某个角色的所有事件的列表,比如没有roleID 1的每个事件,但我不希望任何具有不同roleID的行。 我该怎么办?
答案 0 :(得分:4)
这样的事情应该做
SELECT *
FROM events
WHERE eventid NOT IN
(SELECT eventid FROM assign WHERE roleID=1)
或者如果子查询不可用
SELECT e.*
FROM events e
LEFT JOIN assign a ON (e.eventid=a.eventid AND a.roleid=1)
WHERE a.roleid IS NULL
另一个等效查询:
SELECT *
FROM events e
WHERE NOT EXISTS
(SELECT * FROM assign a WHERE a.eventid=e.eventid AND roleID=1)