- Sélectionner enregistrements qui ne sont pas ailleurs [MySQL] - SQL/NoSQL - Programmation
Marsh Posté le 08-04-2019 à 16:21:35
Utilises LEFT JOIN dans la première requête à laquelle, via un UNION, tu vas faire une seconde requête qui, elle, va chercher les actifs à 0.
Marsh Posté le 08-04-2019 à 19:56:32
+1
si tu as deja trouvé les 2 requetes, tu peux par exemple faire :
Requete 1 UNION Requete 2
Marsh Posté le 09-04-2019 à 10:03:55
Un UNION, tout simplement…
C'est fou, je n'y pense jamais à ça alors que c'est si simple au final.
Bref, c'est réglé:
Code :
|
Merci!
Marsh Posté le 09-04-2019 à 10:39:17
À mon avis il y a moyen de faire plus simple avec un JOIN (FULL JOIN ?) et du filtrage, mais je ne suis pas expert en SQL et je n'ai pas envi de tester.
Marsh Posté le 09-04-2019 à 12:01:50
Ah, le gars bosse sur du Oracle j'ai l'impression.
Des fois, vaut mieux 2 requêtes simples avec un UNION plutôt qu'une requête complexe qui sera plus lente et plus compliquée à faire évoluer
Marsh Posté le 09-04-2019 à 12:23:12
Oui ce n'est pas faux, c'est un peu comme les expressions régulières, parfois tu peux faire tout d'un coup mais au final c'est bien plus couteux.
Marsh Posté le 08-04-2019 à 16:04:15
Bonjour,
J'ai en résumé 2 tables:
MODULES: id, nom, couleur
USERS2MODULES: id_user, id_module, actif
Lorsqu'on donne pour la première fois un accès à un module à un utilisateur, un enregistrement est créé dans la table USERS2MODULES avec "actif" à 1.
Si on souhaite désactiver l'accès au module à un utilisateur, afin d'éviter de perdre des résultats d'exercices (dont je ne parle pas ici), on ne supprime pas l'enregistrement mais on passe "actif" à 0.
Je souhaite, grâce à une requête pour voir récupérer la liste des modules auxquels un utilisateur n'a pas accès.
Il y a donc 2 possibilités:
- Il faut sélectionner tous les modules qui n'ont pas d'enregistrement dans USERS2MODULES pour l'utilisateur demandé
- Il faut aussi retourner les modules qui ont un état "actif" à 0 dans USERS2MODULES
Pour le moment j'arrive à faire soit l'un, soit l'autre mais pas les deux. Je chercher une solution depuis un moment sans y parvenir.
Par avance, merci pour votre aide!