0
votes

I have an sql database with a table holding users(UserID, Name), a table holding events(EventID, EventName), a table holding roles(RoleID, RoleName) and a table assigning roles to users for each event (assignID, EventID, UserID, RoleID).

Now I wanna get a list of all the events that do not contain a certain role, say every event without the roleID 1, but I don't want any rows with a different roleID. how would I do that?

1
Please clarify: "but I don't want any rows with a different roleID" - IsisCode
I can't see a problem here !! - Ahmad Hajjar
I don't want all the rows with roleID 2 or roleID 3, I want to know which events do not contain a roleID 1. - user1162628

1 Answers

4
votes

Something like this should do

SELECT * 
FROM events 
WHERE eventid NOT IN 
     (SELECT eventid FROM assign WHERE roleID=1)

Or if subqueries are not available

SELECT e.* 
FROM events e 
  LEFT JOIN assign a ON (e.eventid=a.eventid AND a.roleid=1) 
WHERE a.roleid IS NULL

One more equivalent query:

SELECT * 
FROM events e 
WHERE NOT EXISTS
     (SELECT * FROM assign a WHERE a.eventid=e.eventid AND roleID=1)