查询数字不在列中的位置?

时间:2012-01-21 18:34:29

标签: sql

我有一个sql数据库,其中包含一个包含用户的表(UserID,Name),一个包含事件的表(EventID,EventName),一个包含角色的表(RoleID,RoleName)和一个为每个事件分配用户角色的表(assignID ,EventID,UserID,RoleID)。

现在我想获得一个不包含某个角色的所有事件的列表,比如没有roleID 1的每个事件,但我不希望任何具有不同roleID的行。 我该怎么办?

1 个答案:

答案 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)