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 update délicate


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 61
    Points : 71
    Points
    71
    Par défaut Requete update délicate
    bonjour

    J'ai bati un MLD que j'héberge sur postgresql et qui est constitué de données venant d'une autre base et de fichiers excel.

    Dans une table commande j'ai un champ "activitecmde" que je dois affecter en fonction des valeurs contenues dans client.activitecli.

    En gros je dois modéliser la requête :
    si commande.activitecmde est < 20 alors, si client.activitecli > 10 where client.numclient = commande.numclient alors commande.activitecmde= client.activitecli

    J'ai essayé ça, mais mon statut de débutant en SQL m'a pas permis d'aboutir...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update commande set activitecmde=(select cli.activitecli from client cli, commande c1, affaire a where cli.numclient=a.numclient and c1.numcmde=a.numaffaire) where (select activitecli from client where activitecli>10)
    En fait j'aimerai croiser les références de tables entres les différentes sous requêtes de la requête...

    Qqun a t-il une idée ?

    Merci !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 61
    Points : 71
    Points
    71
    Par défaut
    UPDATE commande SET activitecmde=client.activitecli WHERE commande.numcmde=affaire.numaffaire and affaire.numclient=client.numclient AND client.activitecli > 10 AND commande.activitecmde < 20

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Comment ça peut marcher ça ?

    Tu ne devrais pas passer par une sous-requête qui te retournerais client.activitecli et où tu préciserais que tu utilises les tables client et affaire dans la clause FROM ?

    Tu as réussi à exécuter une cette requête sans avoir de message d'erreur et ta colonne a été mise à jour ?
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 61
    Points : 71
    Points
    71
    Par défaut
    Ca c'est mieux :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE commande
    SET activitecmde = COALESCE(
    ( SELECT activitecli
    FROM client
    WHERE client.numclient = commande.numclient
    AND activitecli > 10
    AND activitecmde < 20
    ), activitecmde);

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Ah ! De suite ça me convient plus.

    Au passage, je pense que pour éviter de mettre toutes les lignes à jour systématiquement (ie et donc utiliser la fonction COALESCE) tu peux utiliser la clause WHERE EXISTS en faisant une sous-requête.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

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

Discussions similaires

  1. Requete UPDATE !!!
    Par fages dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/07/2004, 16h52
  2. [SYBASE] optimisation requete UPDATE
    Par metheorn dans le forum Sybase
    Réponses: 8
    Dernier message: 24/05/2004, 17h01
  3. [version] Requete Update avec différentes versions de mySQL
    Par regbegpower dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/01/2004, 17h19
  4. Requete update
    Par gianfare dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/10/2003, 09h04
  5. [debutante] erreur requete update
    Par LineLe dans le forum ASP
    Réponses: 5
    Dernier message: 12/09/2003, 13h05

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