MySQL N a N Doppio Iscriviti con NULL - Cross Iscriviti dalla risposta
-
12-12-2019 - |
Domanda
Ho due tavoli da una chiamata autorizzazioni e uno chiamato ruoli che sono collegati attraverso una terza tabella chiamamontanati di ruolo in una relazione N-N.
Permissions
id <- PK
name
Roles
id <- PK
name
RolePermisions
RoleId <-PK
PermissionId <-PK
isAllowed
.
Quello che voglio è ottenere l'elenco completo delle autorizzazioni di un ruolo specifico e null quando non c'è un valore nella tabella di riferimento per quel ruolo.Le entrate a sinistra di solito fanno il trucco, ma non posso lavorare questo.
In pratica diciamo che ho i seguenti valori:
In PermsissiSission:
1 - Per1
2 - Per2
3 - Per3
.
e in ruoli:
1 - Role1
2 - Role2
.
e in roblepermissions:
RoleId - PermissionId - isAllowed
1 1 true
1 2 false
1 3 true
2 1 true
.
La seguente query Sorta funziona ma non restituirà NULLS per tali valori non in acquirenze:
select permissions.name, rolepermissions.allowed
FROM permissions LEFT JOIN rolepermissions
ON rolepermissions.permissionId = permissions.id
WHERE rolepermissions.roleId = 2;
.
Il risultato che cercherei quando la query per il ruolo 2 è
Per1 - true
Per2 - NULL
Per3 - NULL
. Soluzione
Puoi farlo con un 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
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow