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

Requêtes et SQL. Discussion :

Requête Update sur le résultat d'une sous-requête [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre émérite Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 576
    Points : 2 554
    Points
    2 554
    Par défaut Requête Update sur le résultat d'une sous-requête
    Bonjour à tous,

    j'ai une requête qui me donne l'indice de révision le plus récent. (ça fonctionne)

    Par contre, j'essai d'utiliser le résutat de cette requête (en tant que sous-requête) pour mettre à jour le champ "DernierIndice" (= case à cocher)

    J'obtiens le message suivant : "Vous avez écrit une sous-requête pouvant renvoyer plus d'un champs sans utiliser le mot réservé EXISTS dans la clause FROM....")

    Voici la requête complète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT TblIndice.Num_Document, TblIndice.DernierIndice
    FROM TblIndice
    WHERE (((TblIndice.Num_Document)=(SELECT TblIndice.Num_Document, Max(TblIndice.DateIndiceDiffusion) AS MaxDeDateIndiceDiffusion
    FROM TblIndice
    GROUP BY TblIndice.Num_Document;)));
    N'étant pas très bon dans SQL, j'ai utilisé VBE pour la créer, malheureusement sans succés.

    Merci d'avance pour l'aide.

    Curt

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 776
    Points : 58 175
    Points
    58 175
    Billets dans le blog
    42
    Par défaut
    Curt,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...WHERE TblIndice.Num_Document = 
               SELECT TblIndice.Num_Document, Max(TblIndice.DateIndiceDiffusion) AS MaxDeDateIndiceDiffusion
               FROM TblIndice...
    dans le Where, tu écris l'égalité d'un champ avec un Select qui renvoie deux champs, d'où le message :
    Vous avez écrit une sous-requête pouvant renvoyer plus d'un champ...
    Je pense que tu tombes sous le coup de la contribution : retrouver les enregistrements les plus récents par catégorie à adapter pour retrouver l'indice le plus récent par num_document.

    à voir...

  3. #3
    Membre émérite Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 576
    Points : 2 554
    Points
    2 554
    Par défaut
    Bonsoir F-leb,

    Merci pour le lien, ça m'a permis de mettre la requête sélection au point :

    SELECT TblIndice.ID_Indice, TblIndice.Indice, TblIndice.DateIndiceDiffusion
    FROM (TblDocument INNER JOIN (SELECT TblIndice.Num_Document, Max(TblIndice.DateIndiceDiffusion) AS MaxDeDateIndiceDiffusion FROM TblIndice GROUP BY TblIndice.Num_Document) AS RqDernierIndice1 ON TblDocument.ID_Document = RqDernierIndice1.Num_Document) INNER JOIN TblIndice ON TblDocument.ID_Document = TblIndice.Num_Document
    WHERE (((TblIndice.DateIndiceDiffusion)=[RqDernierIndice1].[MaxDeDateIndiceDiffusion]));
    Le soucis à présent et qui est l'objet de ce post, c'est que je voudrais que le champ [DernierIndice] de la table [TblIndice] soit mis à jour (case à cocher = vrai )

    A priori (j'ai lu une question quelques post plus bas), on ne peux pas faire une requête Mise à jour sur le résultat d'une requête Select.

    Merci d'avance pour l'aide

    Curt

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 776
    Points : 58 175
    Points
    58 175
    Billets dans le blog
    42
    Par défaut
    bonsoir curt,

    ouaip, a priori ça ne marchera pas ...

    Essayons avec In :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE TblIndice
    SET [DernierIndice]=true
    WHERE ID_Indice IN (SELECT ID_Indice FROM LaRequeteDeSelection)
    à voir...

  5. #5
    Membre émérite Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 576
    Points : 2 554
    Points
    2 554
    Par défaut
    Re-bonsoir Ff-leb,

    tout d'abord, merci pour le coup de main.
    Et pour un coup de main, c'est un coup de génie...

    ça marche. Voilà la requête de recherche du dernier indice :

    SELECT TblIndice.ID_Indice, TblIndice.Indice, TblIndice.DateIndiceDiffusion
    FROM (TblDocument INNER JOIN (SELECT TblIndice.Num_Document, Max(TblIndice.DateIndiceDiffusion) AS MaxDeDateIndiceDiffusion FROM TblIndice GROUP BY TblIndice.Num_Document) AS RqDernierIndice1 ON TblDocument.ID_Document = RqDernierIndice1.Num_Document) INNER JOIN TblIndice ON TblDocument.ID_Document = TblIndice.Num_Document
    WHERE (((TblIndice.DateIndiceDiffusion)=[RqDernierIndice1].[MaxDeDateIndiceDiffusion]));
    Et la requête de mise à jour :

    UPDATE TblIndice SET TblIndice.DernierIndice = True
    WHERE (((TblIndice.ID_Indice) In (SELECT ID_Indice FROM [RqDernierIndice])));
    Merci pour tout et surtout pour la disponibilité.

    Curt

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 776
    Points : 58 175
    Points
    58 175
    Billets dans le blog
    42
    Par défaut
    re,

    il y a peut-être plus direct (mais pas forcément plus rapide à l'exécution) :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE TblIndice SET TblIndice.DernierIndice = True
    WHERE DateIndiceDiffusion=Dmax("DateIndiceDiffusion", "TblIndice", "NumDocument=" & NumDocument);

  7. #7
    Membre émérite Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 576
    Points : 2 554
    Points
    2 554
    Par défaut
    Bonsoir F-Leb,

    tous les chemins mènent à Rome, mais il y a des chemins plus direct que d'autres...

    Tu es redoutable. C'est nickel et beaucoup plus simple à lire.

    Côté vitesse d'exécution, je regarderai dès que j'aurais quelques milliers de lignes de données.

    Encore merci.

    Curt

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

Discussions similaires

  1. Concaténer résultat d'une sous requête
    Par lolo5935 dans le forum Développement
    Réponses: 9
    Dernier message: 10/09/2010, 09h35
  2. Réponses: 1
    Dernier message: 22/12/2008, 10h15
  3. Requête SQL sur le résultat d'une autre requête
    Par rec82 dans le forum Bases de données
    Réponses: 10
    Dernier message: 12/12/2008, 17h40
  4. Réponses: 2
    Dernier message: 30/08/2007, 23h03
  5. Réponses: 3
    Dernier message: 11/01/2006, 18h35

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