2013-08-01 44 views
3

有了這些3個表:檢查如果用戶屬於多個組

用戶

  • USER_ID
  • 如first_name

  • GROUP_ID

groups_users

  • GROUP_ID
  • USER_ID

很容易檢查用戶是否屬於給定的組,但是可以檢查(在單個查詢中)用戶是否屬於多個組?

E.g.是否1的用戶是否屬於組1, 2, 3, 4

UPDATE

更具體的我要檢查,如果用戶屬於所有給定的羣體,而不是他是否屬於其中之一。

回答

1

這個查詢:

SELECT group_id FROM groups_users WHERE user_id=1 

給你所有組用戶1所屬。

如果你要檢查多個組,你可以這樣做:

SELECT group_id FROM groups_users WHERE user_id=1 AND group_id IN (1,2,3,4) 

如果返回任何記錄,用戶不是在組1234

使用COUNT(group_id)COUNT(DISTINCT group_id)來找出用戶屬於多少組。如果它等於要求的組數,它屬於所有:

SELECT COUNT(DISTINCT group_id)=4 FROM groups_users WHERE user_id=1 AND group_id IN (1,2,3,4) 

如果用戶所屬的所有組,0否則將返回1

+0

Thanks @Bart。請參閱我的更新。 –

+0

我更新了我的答案。 –

+0

非常聰明的解決方案!感謝分享它。 –

2

假設你的意思是問「用戶1是否屬於所有組1,2,3,4」,答案應該是:

select case when (select count(distinct group_id) 
        from group_users 
        where user_id = 1 
        and group_id in (1, 2, 3, 4) 
       ) = 4 then 'member in all four groups' 
      else 'not member in all four groups' 
     end 

可以簡化計數count(*)如果你是確保用戶沒有重複的組條目。

相關問題