Coucou,
J'ai deux tables :
- users ( user_id, user_firstname, user_lastname… )
- cotisations_users ( cotiu_id_user, cotiu_start, cotiu_end )
Chaque entrée de cotisation_users est donc une durée car les cotisations sont valables un an, à partir de la date du paiement. Mais certains utilisateurs ne paient pas de cotisation, donc il n'y a pas toujours d'entrée cotisation_users correspondant à un user_id.
Il me faut donc une requête pour lister tous les utilisateurs qui n'ont pas encore d'entrée dans cotisations_users, mais également ceux dont la date de fin de la cotisation est dépassée.
J'ai fait cette requête qui fonctionne :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT user_id, user_firstname, user_lastname FROM users WHERE NOT EXISTS ( SELECT cotiu_id_user FROM cotisations_users WHERE cotiu_id_user = user_id ) OR EXISTS ( SELECT cotiu_id_user, cotiu_end FROM cotisations_users WHERE cotiu_id_user = user_id AND cotiu_end < CURRENT_DATE() ) |
Mais je trouve ça relativement affreux puisque ça me fait potentiellement deux sous-requêtes… J'imagine qu'il y a moyen de faire mieux, mais comme je ne suis pas du tout expert en SQL, je poste ici
Merci
+0
-0