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 :

Requete SELECT avec tri par rapport à des valeurs d'une autre table


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Points : 119
    Points
    119
    Par défaut Requete SELECT avec tri par rapport à des valeurs d'une autre table
    Bonjour,

    Je dois recuperer les enregistrements d'une première table qui n'ont aucun enregistrement connexe dans une seconde table, triés par rapport à un champ d'une troisième table... Je n'arrive pas à effectuer ce tri.

    Voici les 3 tables:

    table DEMANDE:
    Identifiant
    Designation
    Client

    table CHANTIERS:
    Identifiant
    Designation
    Demande

    table CLIENTS:
    Identifiant
    Nom

    Ma requête (qui fonctionne):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DEMANDE.* FROM DEMANDE 
    LEFT JOIN CHANTIERS ON DEMANDE.Identifiant=CHANTIERS.Demande 
    WHERE (CHANTIERS.Demande Is Null)
    Comment obtenir un tri par nom de client ? (relation: CLIENTS.Identifiant = DEMANDE.Client)

    Merci d'avance pour toute aide...

    Eric

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Points : 119
    Points
    119
    Par défaut Sur la voie...
    C'est encore moi...
    voilà ce que j'ai trouvé comme requete qui fonctionne, mais je trouve cela très moche. Je n'arrive pas à faire une requête avec un seul FROM pour obtenir le même résultat.

    N'est-ce pas optimisable? (je suis sur que si )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DEMANDE.* FROM (SELECT DEMANDE.* FROM DEMANDE LEFT JOIN CHANTIERS ON DEMANDE.Identifiant=CHANTIERS.Demande WHERE (CHANTIERS.Demande Is Null)) AS ATTENTE
     LEFT JOIN CLIENTS ON ATTENTE.Client=CLIENTS.Identifiant
    ORDER BY CLIENTS.NomCli

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 104
    Points : 28 394
    Points
    28 394
    Par défaut
    Rien n'interdit de trier sur une colonne qui n'est pas affichée...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  dmd.* 
    FROM    demande     AS dmd 
        LEFT JOIN 
            chantiers   AS chn
            ON  dmd.identifiant = chn.demande 
        INNER JOIN 
            clients     AS cli
            ON  cli.identifiant = dmd.client 
    WHERE   chn.demande IS NULL
    ORDER BY cli.nom
    ;

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Points : 119
    Points
    119
    Par défaut
    Merci al1_24,

    J'ai donc essayé cette requête dans ACCESS, mais j'obtiens l'erreur ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  DEMANDE.* 
    FROM    DEMANDE
        LEFT JOIN 
            CHANTIERS
            ON  DEMANDE.Identifiant = CHANTIERS.Demande 
        INNER JOIN 
            CLIENTS
            ON  CLIENTS.Identifiant = DEMANDE.Client 
    WHERE   CHANTIER.Demande IS NULL
    ORDER BY CLIENTS.NomCli;
    Message d'erreur d'Access 2000:
    Erreur de syntaxe (opérateur absent) dans l'expression 'DEMANDE.Identifiant = CHANTIERS.Demande INNER JOIN CLIENTS ON CLIENTS.Identifiant = DEMANDE.Client'.
    La reqûete est-elle forcément correcte ? Dans ce cas, je me tournerai vers le forum Access...

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 104
    Points : 28 394
    Points
    28 394
    Par défaut
    C'est une des limitations d'Access, s'il y a plus d'une jointure, il faut lui préciser dans quel ordre les effectuer, donc ajouter des parenthèses....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT  dmd.* 
    FROM    (   demande     AS dmd 
            LEFT JOIN 
                chantiers   AS chn
                ON  dmd.identifiant = chn.demande   
            )
        INNER JOIN 
            clients     AS cli
            ON  cli.identifiant = dmd.client 
    WHERE   chn.demande IS NULL
    ORDER BY cli.nomcli
    ;

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Points : 119
    Points
    119
    Par défaut
    Excellent
    Merci bcp!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/09/2014, 15h57
  2. Réponses: 18
    Dernier message: 18/04/2014, 21h42
  3. Réponses: 3
    Dernier message: 18/12/2009, 12h33
  4. Réponses: 13
    Dernier message: 20/10/2009, 19h05
  5. Réponses: 2
    Dernier message: 13/12/2007, 15h02

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