Accueil > Forum > > > > Requète imbriquée
Requète imbriquée
jeudi 2 septembre 2010 à 10:56:44 |
Requète imbriquée

rbellot
|
Bonjour,
Je rencontre un problème de liaison de deux tables:
j'ai un première table qui contient des véhicules VEHIC et une autre table qui contient les enregistrements planning de ces véhicules.
Je souhaite pour une période donnée récupérer tous les enregistrement planning. Mais le problème est que je n'ai pas les véhicules qui ne sont pas utilisés au planning...et il me les faut.
Afin d'être optimal, j'ai créé une jointure et traité le problème du planning. Je cherche une solution élégante et performante (client/serveur)qui me permette d'y intégrer les véhicules absents du planning.
Une première piste est d'utiliser une requète intégrée : mais pas très optimale.
Une deuxième piste est de créer une deuxième requète derrière et de compléter la première: pas terrible non plus !
Qu'en pensez-vous ?
Merci pour vos réponses.
Richard
|
|
jeudi 2 septembre 2010 à 11:22:23 |
Re : Requète imbriquée

casy
|
Une simple requete sur la table VEHIC avec jointure externe gauche sur la table planning devrait suffire, non ?
---- Sevyc64 (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #
|
|
jeudi 2 septembre 2010 à 11:48:50 |
Re : Requète imbriquée

rbellot
|
Merci Casy
Genre:
Select
Planning.Id_Vehic
...
...
Vehic.Id_Vehic
...
...
From
Vehic Left outer join Planning on vehic.id_Vehic = planning.id_vehic
Where
planning.dateDebut >= pdatedebut and planning.dateFin <= pdatefin
Order by
...
Résultat : si les véhicules ne sont pas dans le planning ils n'apparaissent pas. Hors il me les faut, même à vide.
Comment faire ?
|
|
jeudi 2 septembre 2010 à 11:57:11 |
Re : Requète imbriquée

casy
|
Il n'apparaissent pas à cause de la clause Where.
Pour qu'ils apparaissent, il faut rajouter le cas ou il n'y a pas de planning, c'est à dire ou Planning.dateDebut et Planning.dateFin sont nuls
Code : Where
(planning.dateDebut >= pdatedebut and planning.dateFin <= pdatefin)
OR
(planning.dateDebut is Null and planning.dateFin is null)
---- Sevyc64 (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #
|
|
jeudi 2 septembre 2010 à 12:20:36 |
Re : Requète imbriquée

rbellot
|
Après essai le résultat est le même.
Si on paramètre avec une journée sans planification, il ne ramène rien.
En fait les dates ne sont pas null (si j'ai bien compris ?) mais l'enregistrement est absent dans le planning. Est ce que le Null = rubrique vide ?
|
|
jeudi 2 septembre 2010 à 14:11:28 |
Re : Requète imbriquée

casy
|
Ok, je me suis un peu mélangé les pinceaux.
J'étais parti sur l'idée que les véhicules que tu ne vois pas n'avait pas du tout de planification. Or, ils ont bien des planifications mais en dehors de la plage souhaitée. Donc forcément ma requete ne marche pas.
Il faut effectivement des requetes imbriquées. La jointure se faisant ici, non pas sur la table planning, mais sur table temporaire ne contenant que les planifications dans la plage de date souhaité. D'ailleurs la jointure sera plutôt à ce moment là une externe droite :
Code : SELECT P.Id_Vehic,...,V.Id_Vehic,..... FROM
(SELECT * FROM Planning
WHERE (Planning.dateDebut >= pdatedebut and
Planning.dateFin <= pdatefin)
) P
RIGHT OUTER JOIN Vehic V ON P.Id_Vehic=V.Id_Vehic
Attention, les champs "plannings" dans la clause SELECT ne viennent plus de la table Planning, mais de la table temporaire P
En espérant que cette fois-ci, ça marche
---- Sevyc64 (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #
|
|
jeudi 2 septembre 2010 à 19:16:11 |
Re : Requète imbriquée

rbellot
|
Merci casy de venir bruler tes neurones avec moi
Excuses moi mais j'étais chez un client cet AM.
Voici le code que j'ai testé
SELECT
v.id_VEHIC AS id_VEHIC,
V.NBR_PLACE AS NBR_PLACE,
V.VehicActif AS VehicActif,
V.VehicAFF AS VehicAFF,
V.catVehic AS catVehic,
V.id_TY_VEHI AS id_TY_VEHI,
V.Cle_Rang AS Cle_Rang,
V.dateSup AS dateSup,
V.PLQ_NUM AS PLQ_NUM,
V.desig50 AS desig50,
P.PGCLEUNIK AS PGCLEUNIK,
P.date_debut AS date_debut,
P.Heure_Debut AS Heure_Debut,
P.date_fin AS date_fin,
P.HEURE_FIN AS HEURE_FIN,
P.Lib_planning AS Lib_planning,
P.lib_survol AS lib_survol,
P.Typ_Mission AS Typ_Mission,
P.Cli_Option AS Cli_Option,
P.Id_MISSION AS Id_MISSION,
P.id_VEHIC AS id_VEHIC,
P.Id_M_Vehic AS Id_M_Vehic,
P.IDLg_Mission AS IDLg_Mission,
P.IDINTTECH AS IDINTTECH
FROM
(SELECT * FROM PLANNING_VEHIC
WHERE (PLANNING_VEHIC.date_debut >= {pDateDebut} AND
PLANNING_VEHIC.date_fin <= {pDateFin})
) P
RIGHT OUTER JOIN VEHIC V ON P.id_VEHIC = V.id_VEHIC
ORDER BY
id_VEHIC ASC
et le résultat est identique: aucun enregistrement ne remonte quand je paramètre un jour sans enregistrement dans la table planning_vehic.
Pourrais tu m'expliquer la différence entre jointure gauche et droite: j'ai cru comprendre une différence de cardinalité L(1,0) et R(1,+).
Par rapport à ton code ta requète sur le planning me parait bonne, par contre la recherche des véhicules absents dans la table planning et présents dans la table vehicule semble poser un problème.
Est ce que l'utilisation de is not ne serait pas une solution peut être dans une autre sous requète concernant les véhicules ? Ce n'est pas très élégant...
Ou l'élimination d'une intersection ?
Merci
|
|
jeudi 2 septembre 2010 à 20:20:52 |
Re : Requète imbriquée

casy
|
Je pense que ta requete génère une erreur sur la clause ORDER BY, le nom id_VEHIC est ambiguë.
En effet, dans ton résultat, tu as 2 champs (alias) dont le nom retourné est id_VEHIC, le moteur SQL ne doit pas savoir sur lequel faire le ORDER BY.
Soit tu donne à chaque champ un nom unique, soit dans la clause ORDER BY, tu précise de quelle table le champ vient : ORDER BY P.id_VEHIC
---- Sevyc64 (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #
|
|
jeudi 2 septembre 2010 à 22:32:15 |
Re : Requète imbriquée

rbellot
|
Bonsoir,
J'ai supprimé la clause order by et je teste :
Si je teste sur un jour où il n'y a aucun enregistrement dans le planning, donc la requète devrait ramener au moins les véhicules: le résultat est "pas d'enregistrement"
Si je teste sur un jour où il y a des enregistrements, il généère une erreur de code sql sur <P> : pourquoi, je ne sais.
Dans tous les cas si j'ai bien compris ton code,le right outer join portant sur vehic ne peut me semble-t-il satisfaire la condition car elle n'existe pas, l'enregistrement côté planning étant absent. Peut être existe-t-il une clause absent, is not ??? unknown ???
Merci
Richard (je suis absent demain, je pourrai lire ta réponse mes pas la tester avant samedi matin)
|
|
vendredi 3 septembre 2010 à 08:48:56 |
Re : Requète imbriquée

casy
|
Pour ce qui est des jointures, je te conseille de lire ce document. Il t'apportera, j'espère, quelques précisions quant à leur fonctionnements.
[ Lien ]
Pour ce qui est de ta requete, l'absence de résultat ne vient pas (pour le moment en tout cas) d'un problème de jointure, mais simplement du fait que ta requete ne s'execute pas car elle comporte une erreur.
D'après le message que tu rapporte, ton moteur de base de donnée ne semble pas comprendre la syntaxe utilisée pour donner l'alias P à la requete intermédiaire.
Cette syntaxe marche telle quelle sous SQLServer. Je ne connais pas ton SGBD, mais il faudrait vérifier la syntaxe qu'il attend concernant les alias de tables.
---- Sevyc64 (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #
|
|
Cette discussion est classée dans : problème, première, requète, planning, véhicules
Répondre à ce message
Sujets en rapport avec ce message
problème d'installation de mysql [ par kermina ]
bonjour, j'ai un problème dans l'installation de mysql, la première fois j'ai installé la version 5.5, et après j'ai voulu installé la version 5.0, a
problème connexion mysql et 1&1 [ par 73volts ]
hello j arrive pas à mettre en ligne mon site. j ai transféré tous le contenu du dossier www de movamp avec la même arborrescence. voici mon problème.
Problème concatenation avec lettre arabe [ par slash0388 ]
Bonjour, voilà j'ai un champs dans lequel je stock des données en lettre arabe et quand j'essai de concatener celui ci avec d'autre champs contenant d
[clos] problème avec mes ID [ par msi079 ]
dans ma base de donnée mysql . j'avai des enregistrements que j'ai supprimés .lorsque je fai de nouveaux enregistrements je remarque que le ID ne se r
problème de démarrage de Apache [ par boualiasma ]
Bonjour, Je voulais travailler avec le SGBD Mysql avec EasyPHP pour la création de base des données. Lorsque je démarre EasyPHP je remarque que le M
probleme de virgule [ par colonelblondass ]
Bonjour à vous Forum, J'ai un énorme problème en SQL. J'ai une table avec plus de 21 millions d'enregistrements et en l'important, la colonne avec l
help [ par khoukha12 ]
slt J'ai un problème je l'espère vous m'aider . Mon problème dans SQL SEVER 2005 il n'accepte pas le mot clé "AS" : [code=autre]create type type_Coo
problème avec la requête select [ par hajerkerkena ]
bonjour, je trouve un problème avec la requête select avec condition sur deux champs. voici ma requête string strcmd = "select count(*) from personne
Récup des lancements de batch [ par jpvito ]
Bonjour, Voici le contexte : Des batchs sont lancés par une autre équipe et je ne dispose pas du planning de lancements de ceux-ci. Je cherche donc
problème conversion chaîne en number avec TO_NUMBER [ par Jordan59 ]
Bonsoir à tous Je rencontre un petit souci de conversion de chaîne en numérique. J'ai des nombres décimaux ('1234.56' et '1234,56') stocké dans un
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|