-1
votes

Mysql où dans la liste mais pas dans la table Temp

J'envisage les 2 tables suivantes

select ur.user_id, ur.role_id
from user_roles ur
where ur.user_id in (non_special_user_ids.user_id)


0 commentaires

3 Réponses :


1
votes

Vous pouvez utiliser les fonctions de fenêtre - si vous exécutez MySQL 8.0:

select ur.*
from user_roles ur
where not exists (
    select 1 
    from user_roles ur1
    inner join roles r1 on r1.role_id = ur1.role_id
    where ur1.user_id = ur.user_id and r1.code_name = 'special_role'
)


3 commentaires

Nous utilisons mysql 5.7 :(


Dans votre clause "Se jointure intérieure", je pense que vous voulez dire sur r.role_id = ur1.role_id , oui?


@Jed: En effet. J'ai corrigé ma réponse.



0
votes

juste rejoindre. Cela devrait être assez rapide en supposant que vous avez des clés configurées.

SELECT * FROM user_roles WHERE user_id NOT IN(
    SELECT user_id FROM user_roles JOIN role ON user_role.role_id = role.role_id
        WHERE role.role_code = 'special_role')
    AND user_id IN (1, 2, 3 ...)


2 commentaires

Avec les mêmes données, votre suggestion me donnerait 3 résultats [1,2], [2,2], [3,2]. Je veux recevoir seulement [2,2], [3,2]. Puisque l'utilisateur 1 a le "rôle particulier", je ne veux pas inclure aucun des utilisateurs user_roles.


Édité avec une solution



0
votes

Utilisez dans et pas dans pour les 2 conditions: xxx

voir le Démo .


0 commentaires