【问题标题】:Query where a number is not in a column?查询一个数字不在列中的位置?
【发布时间】:2012-01-22 04:02:11
【问题描述】:

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

现在我想获取不包含特定角色的所有事件的列表,例如每个没有 roleID 1 的事件,但我不想要任何具有不同 roleID 的行。 我该怎么做?

【问题讨论】:

  • 请澄清:“但我不想要任何具有不同角色 ID 的行”
  • 这里看不出问题!!
  • 我不想要所有roleID 2 或roleID 3 的行,我想知道哪些事件不包含roleID 1。

标签: sql


【解决方案1】:

应该这样做

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)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2011-07-03
  • 2014-11-02
相关资源
最近更新 更多