Requete imbrique LEFT JOIN

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Requete imbrique LEFT JOIN

pas mal !!

par R3NL0N1M0 » 08 juin 2005, 18:41

Mi té koné pas si ... je ne savais pas que l'on pouvait faire ce genre requête, efffectivement cela peut être intéressant , puisque sa évite de créer une table temp et de la remplir a chaque fois!
Et étant donné que je n'ai pas une tonne de formateur, alors j'ai ma première requete qui me sort les formateurs OQP --> concaténation dans une variable et séparé par une ','.
Puis Select les formateurs NOT IN la variable!

j'ai pas testé en entier mais sa m'a l'air fonctionnel aussi!

Merci a tous

demi solution

par Bak » 08 juin 2005, 17:25

J'ai pas eu du temps pour me pencher sur ce sujet, mais je ne pense pas trouver une solution même en réfléchissant plus !!
Bref !

Je n'ai pas de solution pour une suppert requette !
Mais en tout cas tu peux ne pas utiliser de table temp (temporaire) en faisant une 1er requette : (SELECT distinct login_formateur FROM seances S WHERE S.debut_seance < '2005-06-05 11:00:00' AND S.fin_seance > '2005-06-05 10:00:00' ) mettre le résulta dans une variable du style :
...
Tanque pas fin d'enregistrement ...
strParam = strParam + ", " + enregitrement_en_cours
lire enregistrement suivant
Fin TQ

....

SELECT login_formateur, nom_formateur, prenom_formateur
FROM formateur
WHERE login_formateur Not In (" + strParam + ")"

.....


Faire attention a bien allimenté la variable strParam pour avoir un format corect pour une requette SQL !!

Bref, t'as compris le principe !!

@+ Quoi

par LNP » 08 juin 2005, 09:57

BAK : je croyais que RENLONIMO avait déjà essayé cette requête et qu'elle ne le satisfaisait pas ! ! !

LNP...
pour vous...

Oups !!

par Bak » 08 juin 2005, 09:55

J'avais pas lu le début des messages echangés !
Désolé R3NL0N1M0, ça ne répond pas à ta question.

Bref, @+ Quoi !

Bref !

par Bak » 08 juin 2005, 09:50

Si tu sais retrouver facillement les formateurs non disponibles, tu peux faire 2 requettes impriquées :
Ex :
SELECT login_formateur, nom_formateur, prenom_formateur
FROM formateur
WHERE login_formateur Not In ( SELECT login_formateur FROM seances
WHERE s.debut_seance < '2005-06-05 11:00:00' AND s.fin_seance > '2005-06-05 10:00:00' )

Je ne sais pas si ça marche dans MYSQL !

Bon courage
Si t'as pas comprit le principe fait moi signe, les requettes imbriqués évitent de créer des tables temporaires!

Bref,
@+ Quoi !

par Cyrano » 07 juin 2005, 22:04

Ça ne répond pas à la question Inp, il cherche les formateurs disponibles dans cette tranche horaire, pas ceux qui sont en séance comme ta requête va retourner

une réponse peut-être ? !

par lnp » 07 juin 2005, 21:54

SELECT login_formateur, nom_formateur, prenom_formateur
FROM formateur f, seances s
WHERE f.login_formateur = s.login_formateur
AND s.debut_seance < '2005-06-05 11:00:00' AND s.fin_seance > '2005-06-05 10:00:00'

Je ne sais pas si cela fonctionne !

LNP...
pour vous...

Requete imbrique LEFT JOIN

par R3NL0N1M0 » 07 juin 2005, 21:18

Bon bin j'ai trouvé une solution mais je ne pense pas qu'elle soit bien:

j'utilise une table temporaire 'temp' dans laquelle je met le resultat des formateurs OQP ( SELECT login_formateur FROM seances S WHERE S.debut_seance < '2005-06-05 11:00:00' AND S.fin_seance > '2005-06-05 10:00:00' )

Ensuite je fais un LEFT JOIN avec la table formateur:

SELECT F.login_formateur, F.nom_formateur, F.prenom_formateur FROM formateurs F LEFT JOIN temp ON F.login_formateur=temp.login_formateur WHERE temp.login_formateur Is Null;

Et j'obtiens les formateurs disponibles dans l'interval.
Fonctionnel mais pas otpimisé.
Alors si vous trouvez mieux merci!!

CIAO CIAO

Requete imbrique LEFT JOIN

par R3NL0N1M0 » 07 juin 2005, 21:06

bin j'y est déjà pensé a sa!
Mais sa ne me renvoye rien du tout!
donc je suis toujours au mm point
merci kan mm

par albat » 07 juin 2005, 18:55

Pas testé, mais ça devrait pas être loin...

Code : Tout sélectionner

SELECT F.login_formateur, F.nom_formateur, F.prenom_formateur FROM formateur F LEFT JOIN seances S ON F.login_formateur = S.login_formateur WHERE S.debut_seance < '2005-06-05 11:00:00' AND S.fin_seance > '2005-06-05 10:00:00' AND S.login_formateur IS NULL

Requete imbrique LEFT JOIN

par R3NL0N1M0 » 07 juin 2005, 18:47

j'ai une table seances ( login_formateur, login_client, debut_seance, fin_seance ),
j'ai une table formateur ( login_formateur, nom_formateur, prenom_formateur, ... )

je veux les formateurs disponibles entre 10h00 et 11h00 aujourd'hui, donc j'ai fais une requete imbriqué :

SELECT login_formateur, nom_formateur, prenom_formateur FROM formateur WHERE login_formateur NOT IN (SELECT login_formateur FROM seances WHERE debut_seance < '2005-06-05 11:00:00' AND fin_seance > '2005-06-05 10:00:00' )
ici je recupère les login OQP , et du coup un SELECT NOT IN me donne les login libres

SAUF QUE SA MARCHE SUR MYSQL > 4.1 v voila mon probleme
j ai regardé les unions intersection création de table temp, left join, ETC
j ai pas trouvé alors je suis sure de passer a coté

Si quelqu'un pouvez m'eclairer ma lenterne bien sombre ... Merci