2012-03-12 1 views
0

私は2つのテーブルを1つのアクセス権と呼び、1つはRolePermissionsというN-N関係の第3のテーブルを介して関連しています。私が欲しいものmySql NからNまでのヌルでの二重結合 - 回答からのクロス結合

Permissions 
id <- PK 
name 


Roles 
id <- PK 
name 

RolePermisions 
RoleId <-PK 
PermissionId <-PK 
isAllowed 

は、その役割のためRolePermissionにテーブルに値がない場合、特定の役割の権限、およびNULL値の完全なリストを取得することです。左ジョイントは通常、トリックを行いますが、私はこれを動作させることはできません。 Permsissionで

基本的のは、私は、次の値を持っているとしましょう

1 - Per1 
2 - Per2 
3 - Per3 

そして役割で:

1 - Role1 
2 - Role2 

そしてRolePermissions中:

RoleId - PermissionId - isAllowed 
1   1    true 
1   2    false 
1   3    true 
2   1    true 

次のクエリでは、みかん動作しますが、それはRolePermissionsにおけるそれらの値ではないためにNULLを返しません。

select permissions.name, rolepermissions.allowed 
FROM permissions LEFT JOIN rolepermissions 
    ON rolepermissions.permissionId = permissions.id 
WHERE rolepermissions.roleId = 2; 

役割2を照会するときに私が探していることになる結果は

Per1 - true 
Per2 - NULL 
Per3 - NULL 
+0

おかげでマイケル、私はそれを投稿した後、それを修正するために行って、私はそれを保存しようとしたとき、あなたはそれを固定気づきました。再度、感謝します。 –

答えて

0

であるあなたがこれを行うことができますCROSS JOINで:フォーマットを固定する

SELECT 
    r.ID AS RoleID, 
    p.ID AS PermissionID, 
    rp.IsAllowed 
FROM 
    Roles r CROSS JOIN 
    Permissions p LEFT JOIN 
    RolePermissions rp ON rp.RoleId = r.ID AND rp.PermissionID = p.ID 
WHERE r.ID = @RoleID 
+0

ありがとう!それがチケットです。 CROSS私は行方不明だった。ありがとうございました! –

関連する問題