IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Probleme sur une requete


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Probleme sur une requete
    Bonjour,

    J'ai un petit problème avec une requête, je doit récupérer l'immatriculation d'un véhicule et d'une remorque. Donc dans une table je récupère l'ID du véhicule et l'ID de la remorque lorsqu'il y en a une. L'ID correspond à une immatriculation dans une autre table. Mon problème est que je ne sais pas comment je peux faire pour récupérer l'immatriculation de la remorque.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select Table_Vehicule.Imat FROM Table_driver, Table_Vehicule WHERE Table_driver.IDImat = Table_Voiture.IDImat
    Cette requete me permet de récupérer l'immatriculation du véhicule mais si je rajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select Table_Vehicule.Imat, Table_Vehicule.Imat FROM Table_driver, Table_Vehicule WHERE Table_driver.IDImat = Table_Voiture.IDImat AND Table_driver.IDTrailer = Table_Voiture.IDImat
    Ne me donne aucun résultat ou les résultats sont identiques dans les 2 colonnes.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous pouvez utiliser deux fois la même table avec deux alias différents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select
        V1.Imat,
        V2.Imat
    FROM
        Table_driver D
        inner join Table_Vehicule V1
          on D.IDImat = V1.IDImat 
        inner join Table_Vehicule V2
          on D.IDTrailer = V2.IDImat
    Cette requête ne retournera pas les véhicules sans remorque.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    A partir du moment où tu demande à ta requête de selectionner deux fois la même colonne, tu aurais plutôt pu t'inquiéter si les deux valeurs étaient différentes.

    Ta table Table_driver a deux colonnes qui référencent Table_vehicule.
    La colonne IDImat référence une voiture, et IDTrailer une remorque, et tu cherches à afficher les deux correspondances.

    Il va falloir joindre deux fois ta table driver avec la table vehicule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Select voiture.Imat AS Imat_voiture, remorque.Imat AS Imat_remorque
    FROM Table_driver driver
    LEFT JOIN Table_Vehicule voiture
    	 ON voiture.IDImat = driver.IDImat
    LEFT JOIN Table_vehicule remorque 
    	 ON remorque.IDImat = driver.IDTrailer
    LEFT JOIN correspond à une jointure externe gauche, dans l'exemple ça veut dire que l'on ramènera quand même une ligne si l'une des conditions de jointure n'est pas vérifiée, c'est à dire si une ligne de la table 'driver' n'a pas de voiture et/ou pas de remorque correspondante.
    Ca m'a semblé plus logique, mais ça dépend de ce que tu souhaites afficher exactement.

    EDIT : devancé de loin
    Je laisse quand même ma version pour le LEFT JOIN, et au passage Waldar il y a une légère étourderie dans la deuxième jointure, c'est V2.IDImat (à moins que j'ai raté quelque chose, l'explication n'étant pas limpide).

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Tout-à-fait, excès de copier coller

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Merci pour vos réponses rapide , ça fait toujours plaisir quand il y a des gens qui vous aide ^^.

    ous pouvez utiliser deux fois la même table avec deux alias différents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT
        V1.Imat,
        V2.Imat
    FROM
        Table_driver D
        INNER JOIN Table_Vehicule V1
          ON D.IDImat = V1.IDImat 
        INNER JOIN Table_Vehicule V2
          ON D.IDTrailer = V2.IDImat
    Cette requête ne retournera pas les véhicules sans remorque.
    Votre méthode semble fonctionner, cependant si je veux récupérer aussi les véhicules qui n'ont pas de remorque?

  6. #6
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    Citation Envoyé par DGuillaume Voir le message
    Votre méthode semble fonctionner, cependant si je veux récupérer aussi les véhicules qui n'ont pas de remorque?
    il faut regarder du côté de "left join" comme l'a suggéré Snipah dans son post

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Citation Envoyé par DGuillaume Voir le message
    Merci pour vos réponses rapide , ça fait toujours plaisir quand il y a des gens qui vous aide ^^.
    ...
    Votre méthode semble fonctionner, cependant si je veux récupérer aussi les véhicules qui n'ont pas de remorque?
    Ca fait plaisir aussi quand il y a des gens qui lisent quand on les aide

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Eh bien, j'ai le plaisir de vous annoncer que ma requête fonctionne parfaitement bien avec le mélange de vos 2 méthodes .
    Je vous remercie de m'avoir aidé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme sur une requete qui ne fonctionne pas
    Par tralala2 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/08/2009, 10h05
  2. Probleme sur une requete d'update
    Par trinea dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/08/2007, 19h57
  3. probleme sur une requete
    Par popofpopof dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 17/06/2007, 06h16
  4. probleme sur une requete avec DISTINCT
    Par samsso2006 dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/05/2007, 14h35
  5. Probleme sur une requete
    Par ager1912 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/07/2005, 10h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo