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 :

QUEL EST LE PB DANS MA REQUETE????


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut QUEL EST LE PB DANS MA REQUETE????
    Alors j'ai pourtant bien lu tous les posts sur les problème d'utilisation de UPDATE, j'ai aussi essayé différentes façons de faire ma requete mais ça ne marche tjrs pas....

    Je dispose d'une 1ere table (Table_Braderie) avec 3 champs [N° BRADERIE](clé), [DATE] et [LIEU].
    Je dispose d'une 2eme table (Table_Achat) avec 4 champs [N° ACHAT](clé), [N° BRADERIE], [N° CLIENT] et [MONTANT].
    La requete ci-dessous permet de recupérer les Clients [N° CLIENT] qui ont fait au moins 2 achats pour une dépense totale de plus de 500€ ces 12 derniers mois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT Table_Achats.[N° CLIENT]
    FROM [Table_Braderies] INNER JOIN Table_Achats ON Table_Braderies.[N° BRADERIE] = Table_Achats.[N° BRADERIE]
    WHERE (((Table_Braderies.DATE)>DateAdd("m",-12,Date())))
    GROUP BY Table_Achats.[N° CLIENT]
    HAVING (((Sum(Table_Achats.MONTANT))>500) AND ((Count(Table_Achats.[N° ACHAT]))>=2)))

    Je dispose d'une 3eme table (Table_Client) avec beaucoup de champs [N° CLIENT](clé), [NOM], ... et [SEGMENTATION].
    Je souhaiterai maintenant mettre a jour un champ de ma table Client [SEGMENTATION] pour tous les utilisateurs récupérés avec la requete précedente.
    J'ai essayé avec la requête ci-dessous mais ça ne marche pas. Où est le probleme?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    UPDATE Table_Clients
    SET Table_Clients.SEGMENTATION = "CPP"
    FROM Table_Clients AS a INNER JOIN Table_Achats AS b ON a.[N° CLIENT] = b.[N° CLIENT]
    WHERE b.[N° CLIENT] = (	SELECT Table_Achats.[N° CLIENT]
    			FROM [Table_Braderies] INNER JOIN Table_Achats ON Table_Braderies.[N° BRADERIE] = Table_Achats.[N° BRADERIE]
    			WHERE (((Table_Braderies.DATE)>DateAdd("m",-12,Date())))
    			GROUP BY Table_Achats.[N° CLIENT]
    			HAVING (((Sum(Table_Achats.MONTANT))>500) AND ((Count(Table_Achats.[N° ACHAT]))>=2)))
    [/code]

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    Ta sous-requete renvoir plus d'une valeur alors il faut utiliser le mot cle IN au lien de =.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE maTable
    SET MonChamp = 'MaValeur'
    WHERE Entite_ID IN (
    SELECT Entite_ID
    FROM MonAutreTable
    WHERE MaCondition = 'Condition'
    )

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    il me met tjrs une erreur de syntaxe : operateur absent

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Personne ne peut m'aider??? Aïe aïe aïe!!

  5. #5
    Ol'
    Ol' est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 56
    Points : 69
    Points
    69
    Par défaut
    Je ne vois pas pourquoi tu veux faire un UPDATE sur une jointure. Ce n'est d'ailleurs à ma connaissance pas possible.

    Il faut donc que tu fasses ton UPDATE sur UNE table et tu mets la condition de ta jointure dans la clause where.

    J'espère que cela pourra t'aider

    Ol'

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bah qd je fais ma requete comme ci dessous g une fenetre qui s'ouvre me demandant la valeur de Table_Clients.[N° CLIENT]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE Table_Clients SET Table_Clients.SEGMENTATION = "CPP"
    WHERE Table_Clients.[N° CLIENT] IN (SELECT Table_Achats.[N° CLIENT] FROM Table_Braderies INNER JOIN Table_Achats ON Table_Braderies.[N° BRADERIE] = Table_Achats.[N° BRADERIE] WHERE (((Table_Braderies.DATE)>DateAdd("m",-12,Date()))) GROUP BY Table_Achats.[N° CLIENT] HAVING (((Sum(Table_Achats.MONTANT))>500) AND ((Count(Table_Achats.[N° ACHAT]))>=2)))

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Problème résolu, il fallait rajouter des parentheses pour le WHERE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE Table_Clients SET Table_Clients.SEGMENTATION = "CPP"
    WHERE (((Table_Clients.N°CLIENT) In (SELECT Table_Achats.[N° CLIENT]
    FROM Table_Braderies INNER JOIN Table_Achats ON Table_Braderies.[N° BRADERIE] = Table_Achats.[N° BRADERIE]
    WHERE (((Table_Braderie.DATE)>DateAdd("m",-12,Date())))
    GROUP BY Table_Achats.[N° CLIENT]
    HAVING (((Sum(Table_Achats.MONTANT))>500) AND ((Count(Table_Achats.[N° ACHAT]))>=2)))));

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

Discussions similaires

  1. Quel est le problème dans cette ligne ?
    Par alaa1993 dans le forum Android
    Réponses: 7
    Dernier message: 31/01/2014, 12h54
  2. [DOM] quel est l'erreur dans mon code
    Par une_tite_question dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 10/08/2008, 11h20
  3. Réponses: 3
    Dernier message: 24/10/2005, 16h59
  4. Qu'est qui cloche dans la requete suivante ?
    Par romeo9423 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 08/02/2005, 19h20
  5. Quel est le problème dans ce code ?
    Par Luther13 dans le forum C
    Réponses: 12
    Dernier message: 26/08/2003, 16h09

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