Simplification d'une requete

Eléphant du PHP | 440 Messages

12 juin 2013, 13:00

Bonjour à tous,

J'ai cette requete
select id_rh_stage, nbre_heure_stage , nom, prenom, date_debut_stage, date_fin_stage
FROM rh_personnel_stage rhps
INNER JOIN rh_personnel rhp ON rhp.id_rhp=rhps.id_rhp
WHERE rhps.id_rhp='107' AND id_rh_stage NOT IN (select rh_stage_prime.id_rh_stage
FROM rh_stage_prime
INNER JOIN rh_personnel_stage on rh_personnel_stage.id_rh_stage=rh_stage_prime.id_rh_stage
WHERE id_rhp='107')
Je veux afficher les ID_RH_stage pour l'utilisateur 107 mais que ces ID_RH_STAGE ne soit pas deja affecté dans la table rh_stage_prime)

J'ai réalisé cette requete, cela fonctionne, mais je voudrais savoir si il y a un autre moyen de faire

Merci d'avance

guigui69

Eléphant du PHP | 96 Messages

27 juil. 2013, 23:30

Peut etre avec un outer join, mais j'en suis pas sur ou avec un OUTER join
SELECT id_rh_stage, nbre_heure_stage , nom, prenom, date_debut_stage, date_fin_stage
FROM rh_personnel_stage rhps
INNER JOIN rh_personnel rhp ON rhp.id_rhp=rhps.id_rhp
LEFT OUTER JOIN id_rh_stage ON rh_personnel_stage.id_rh_stage=rh_stage_prime.id_rh_stage

WHERE id_rhp='107' AND id_rh_stage IS NULL
Le mkframework, un framework simple et sécurisé: http://mkdevs.com

antoine94200
Invité n'ayant pas de compte PHPfrance

30 sept. 2013, 09:41

Bonjour,
le NOT IN est à éviter , il est désastreux en terme de performances.Utilise toujours not exists si tu le peux.

une toute petite retouche améliorera les performances :
SELECT id_rh_stage, nbre_heure_stage , nom, prenom, date_debut_stage, date_fin_stage
FROM rh_personnel_stage rhps
INNER JOIN rh_personnel rhp ON rhp.id_rhp=rhps.id_rhp
WHERE rhps.id_rhp='107' AND NOT exists (SELECT 1
											FROM rh_stage_prime
											INNER JOIN rh_personnel_stage ON rh_personnel_stage.id_rh_stage=rh_stage_prime.id_rh_stage
											WHERE rh_stage_prime.id_rhp=rhpsid_rhp. and rh_stage_prime.id_rh_stage=rhp.id_rh_stage)