2012-09-10 29 views
1

我想弄清楚如何選擇沒有workgroup集合的所有活動用戶。選擇沒有工作組的用戶,只有活躍用戶

我有user表和col active(1 = true)來查看用戶是否處於活動狀態。但是,一個用戶可以在系統中擁有多個「角色」,並且每個角色都有一組設置。

Workgroup是userrolesetting中的一個設置,它的ID是1000.我想讓所有缺少工作組的用戶或工作組爲空的地方。

我試圖去:

SELECT * 
FROM user U 
INNER JOIN userrole R 
ON R.uid = U.uid 
INNER JOIN userrolesetting S 
ON R.rid = S.rid 
WHERE U.active = 1 

這是完全無義,但我對如何攻擊它真的很困惑。

+0

這將有助於如果你在你的文章中包含表定義。請編輯帖子並添加定義。謝謝。 –

回答

3

嘗試以下操作:

SELECT * 
    FROM USER u 
    INNER JOIN USERROLE r 
    ON (r.UID = u.UID) 
    LEFT OUTER JOIN USERROLESETTING s 
    ON (s.RID = r.RID AND 
     s.ID = 1000) -- may be the wrong column name - change as needed 
    WHERE u.ACTIVE = 1 AND 
     s.RID IS NULL 

分享和享受。

+0

非常享受!謝謝 – Jason94

0

沒有測試,但是這個怎麼樣:

select * from user u 
where u.active = 1 
and exists(select 'x' from userrole r 
      where u.uid = r.uid 
       and not exists(select 'x' from userrolesetting s 
          where r.rid = s.rid 
          and s.settingid = 1000)); 

我不知道你的數據模型,所以,我不知道你所說的「或者工作組爲空」是什麼意思?

「工作組」是settingid = 1000的地方,對吧?

如果您可以顯示所有三個表格的完整描述,則可能會更容易理解您之後的內容。上面的查詢應該返回所有具有不具有setid = 1000的userrolesettings角色的用戶。

希望有所幫助。