2013-09-26 46 views
0

說我有我有一個多對多的關係三個表希望得到的結果作爲原始數據布爾

users.id 

roles.id 

usersroles.users_id, usersroles.roles_id 

我怎樣才能獲得發言權的用戶1下列頭具有三重連接(我想,如果子句中選擇):

users.id, roles.id, (tinyint)has_the_role 
1,1,0 
1,2,1 
1,3,1 
1,4,0 
+0

你是說你只想區分角色2和3嗎?那麼其他任何角色都是0?順便說一下,你的IF條件的本能是準確的 - 選擇if(roles.id = 2,'1','0') –

+0

我想選擇表中的所有角色,而不管用戶是否有條目多對多的表格。如果他們沒有那個條目,我想布爾位是0.如果條目存在,位是1. has_the_role不是一個真正的列,但將通過查詢計算 – y2k

回答

1

您將需要兩個連接爲:

SELECT users.id, roles.id, 
    CASE WHEN usersroles.roles_id IS NULL THEN 0 ELSE 1 END AS has_the_role 
FROM users 
INNER JOIN roles 
LEFT JOIN usersroles ON users.id = usersroles.users_id AND roles.id = usersroles.roles_id 

首先,你加入的用戶表的R oles表(無條件,所有可能性都加入),然後檢查是否有特定組合的usersroles條目。

相關問題