2013-10-29 61 views
1

我想寫僅返回他們做 用戶沒有作用,因爲1.嘗試其中的id不爲用戶

查詢表列角色ID存在檢索行,用戶ID , 用戶類型。用戶ID具有每個角色ID的條目。因此,例如:

roleid  userid 
    1   323  
    3   323 
    4   323 
    6   323 
    7   323 
    10   323  
    3   324 
    4   324 
    6   324 
    7   324 
    10   324 

每次我想這只是取出排在角色ID爲1,但我需要一個整體的用戶即323不顯示,因爲它有1

會很感激幫助有了這個。

感謝

編輯:

select * from usersroles where userid in (
select userid from uprofiles where networkid in 
(select network_id from network where usertype in (469,467,466,468))) and roleid !=1; 

我使用上述但這返回用戶無需角色ID 1,但仍返回與其他角色的用戶。我想查詢只返回用戶沒有1

+0

你能告訴我們一些代碼,以便更好地理解你所需要的嗎? – lemunk

回答

0

如果你有一個users表,比你可以這樣做:

select ID -- other relevant user fields here 
from users 
where ID not in (select userId from userRoles where roleId = 1) 

如果你沒有爲用戶一個單獨的表(即該userId字段不是外鍵),比你可以這樣做:

select distinct userId 
from userRoles 
where userId not in (select userId from userRoles where roleId = 1) 

在這兩種情況下,子查詢select userId from userRoles where roleId = 1會給你確實有1角色的用戶的列表,你只需要確保我們的ID呃不在這個列表中。

1

它是如此容易?

select distinct userid from table where UserID <> 1 
1

你要麼需要存在子句:

select userid from users 
where not exists (select * from userroles where userid = users.userid and roleid = 1); 

或者你與角色ID 1從集合中的所有用戶中減去的一組用戶:

select userid from users 
minus 
select userid from userroles where roleid = 1; 
0

現在你已經編輯您的要求,這裏是您更正的選擇聲明:

select * from usersroles where userid in 
(
    select userid from uprofiles where networkid in 
    (
    select network_id from network where usertype in (469,467,466,468) 
) 
) 
and userid not in 
(
    select userid from usersroles where roleid =1 
); 

或者:

select * from usersroles where userid in 
(
    select userid from uprofiles where networkid in 
    (
    select network_id from network where usertype in (469,467,466,468) 
) 
    minus 
    select userid from usersroles where roleid =1 
); 
相關問題