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 :

Update avec Select : je n'y arrive pas.


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Update avec Select : je n'y arrive pas.
    Bonjour,

    Voici ma requete SELECT sur la table que je souhaite mettre à jour (et qui me donne bien le resultat que j'attend) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT     MA.RES_UID, MA.TASK_UID, MA.PROJ_ID
     
    FROM        MSP_WEB_RESOURCES MWR INNER JOIN
                   MSP_PROJECTS MP INNER JOIN
                   MSP_ASSIGNMENTS MA ON MP.PROJ_ID = MA.PROJ_ID INNER JOIN
                   MSP_TASKS MT ON MA.TASK_UID = MT.TASK_UID AND MP.PROJ_ID = MT.PROJ_ID INNER JOIN
                   MSP_RESOURCES MR ON MP.PROJ_ID = MR.PROJ_ID AND MA.RES_UID = MR.RES_UID ON MWR.RES_NAME = MR.RES_NAME
     
    WHERE     (MWR.WRES_IS_ENABLED = 0)
    Je souhaite mettre à jour d'autres champs de la table MSP_ASSIGNMENTS pour chaque ligne du résultat de mon SELECT.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE    MSP_ASSIGNMENTS
    SET         ASSN_REM_WORK = 0, ASSN_WORK = ASSN_ACT_WORK
    WHERE ???
    Comment faire svp ? J'ai essayer d'ajouter mon select , d'utiliser la fonction EXISTS, mais je dois mal m'y prendre car cela ne fonctionne pas.

    Merci de votre aide !

  2. #2
    Membre averti Avatar de Shivaneth
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 349
    Points : 341
    Points
    341
    Par défaut
    Bonjour,
    je ne vois pas bien le rapport entre les deux requêtes. Tu pourrais poster les structures de tes tables stp ?

    essaye tout de même ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    UPDATE MSP_ASSIGNMENTS
    SET ASSN_REM_WORK = 0, ASSN_WORK = ASSN_ACT_WORK
    WHERE RES_UID, TASK_UID, PROJ_ID IN (SELECT MA.RES_UID, MA.TASK_UID, MA.PROJ_ID
     
    FROM MSP_WEB_RESOURCES MWR INNER JOIN
    MSP_PROJECTS MP INNER JOIN
    MSP_ASSIGNMENTS MA ON MP.PROJ_ID = MA.PROJ_ID INNER JOIN
    MSP_TASKS MT ON MA.TASK_UID = MT.TASK_UID AND MP.PROJ_ID = MT.PROJ_ID INNER JOIN
    MSP_RESOURCES MR ON MP.PROJ_ID = MR.PROJ_ID AND MA.RES_UID = MR.RES_UID ON MWR.RES_NAME = MR.RES_NAME
     
    WHERE (MWR.WRES_IS_ENABLED = 0))
    PS : le IN ne fonctionne pas tout le temps avec plusieurs champs, dans ce cas il faudra faire une concaténation des trois champs et comparer cette valeur.
    Shiv@ Skunk

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    je viens de tester cette solution, mais j'obtiens une erreur :

    Erreur dans la clause WHERE à côté de 'RES_UID'.
    Impossible d'analyser le texte de la requête.

  4. #4
    Membre averti Avatar de Shivaneth
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 349
    Points : 341
    Points
    341
    Par défaut
    essaye de concaténer RES_UID, TASK_UID, PROJ_ID en une seule valeur et pareil pour le IN

    ou alors de mettre des parenthèses autour des trois valeurs
    Shiv@ Skunk

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Structures de mes tables
    MSP_PROJECTS contient
    PROJ_ID

    MSP_RESOURCES contient
    PROJ_ID
    RES_UID
    RES_NAME

    MSP_ASSIGNMENTS contient
    PROJ_ID
    RES_UID
    TASK_UID

    MSP_TASKS contient
    PROJ_ID
    TASK_UID

    MSP_WEB_RESOURCES contient
    RES_NAME

  6. #6
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UPDATE    MSP_ASSIGNMENTS
    SET         ASSN_REM_WORK = 0, ASSN_WORK = ASSN_ACT_WORK
     
    FROM        MSP_WEB_RESOURCES MWR INNER JOIN
                   MSP_PROJECTS MP INNER JOIN
                   MSP_ASSIGNMENTS MA ON MP.PROJ_ID = MA.PROJ_ID INNER JOIN
                   MSP_TASKS MT ON MA.TASK_UID = MT.TASK_UID AND MP.PROJ_ID = MT.PROJ_ID INNER JOIN
                   MSP_RESOURCES MR ON MP.PROJ_ID = MR.PROJ_ID AND MA.RES_UID = MR.RES_UID ON MWR.RES_NAME = MR.RES_NAME
    WHERE     (MWR.WRES_IS_ENABLED = 0)

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Concatenation
    la concatenation me faire une addition (car il ne s'agit que d'ID sous forme de nombres)

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Mathusalem Voir le message
    et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UPDATE    MSP_ASSIGNMENTS
    SET         ASSN_REM_WORK = 0, ASSN_WORK = ASSN_ACT_WORK
     
    FROM        MSP_WEB_RESOURCES MWR INNER JOIN
                   MSP_PROJECTS MP INNER JOIN
                   MSP_ASSIGNMENTS MA ON MP.PROJ_ID = MA.PROJ_ID INNER JOIN
                   MSP_TASKS MT ON MA.TASK_UID = MT.TASK_UID AND MP.PROJ_ID = MT.PROJ_ID INNER JOIN
                   MSP_RESOURCES MR ON MP.PROJ_ID = MR.PROJ_ID AND MA.RES_UID = MR.RES_UID ON MWR.RES_NAME = MR.RES_NAME
    WHERE     (MWR.WRES_IS_ENABLED = 0)
    Ca avait l'air super bien... mais voila ce que j'ai en retour :

    Le Concepteur de requêtes ne gère pas la construction SQL Optional FROM clause.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut help


    J'ai beau me torturer les méninges ... je ne vois pas ce qui cloche.
    Quelqu'un saurait m'expliquer ce que veut dire le message d'erreur cité au dessus ??

    Frédéric, please help me ^^ j'avais suivi une de vos formations SQL l'année dernière ;-) Ca vaut bien un ptit coup de pouce hum ?

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    La syntaxe UPDATE...FROM, bien qu'assez répandue, n'est pas conforme à la norme SQL.
    Précisez quel est votre SGBD pour obtenir une réponse correspondant à ses particularités.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Mon SGBD
    Il s'agit de SQL server.
    SRV2000 avec SQL2000.

    J'espere que ma réponse pourra vous aider à m'aider

  12. #12
    Membre averti Avatar de Shivaneth
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 349
    Points : 341
    Points
    341
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UPDATE MSP_ASSIGNMENTS
    SET ASSN_REM_WORK = 0, ASSN_WORK = ASSN_ACT_WORK
    WHERE RES_UID+'$'+TASK_UID+'$'+PROJ_ID IN (SELECT MA.RES_UID+'$'+MA.TASK_UID+'$'+MA.PROJ_ID
     
    FROM MSP_WEB_RESOURCES MWR INNER JOIN
    MSP_PROJECTS MP INNER JOIN
    MSP_ASSIGNMENTS MA ON MP.PROJ_ID = MA.PROJ_ID INNER JOIN
    MSP_TASKS MT ON MA.TASK_UID = MT.TASK_UID AND MP.PROJ_ID = MT.PROJ_ID INNER JOIN
    MSP_RESOURCES MR ON MP.PROJ_ID = MR.PROJ_ID AND MA.RES_UID = MR.RES_UID ON MWR.RES_NAME = MR.RES_NAME
     
    WHERE (MWR.WRES_IS_ENABLED = 0))
    Shiv@ Skunk

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Shiva Skunk Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UPDATE MSP_ASSIGNMENTS
    SET ASSN_REM_WORK = 0, ASSN_WORK = ASSN_ACT_WORK
    WHERE RES_UID+'$'+TASK_UID+'$'+PROJ_ID IN (SELECT MA.RES_UID+'$'+MA.TASK_UID+'$'+MA.PROJ_ID
     
    FROM MSP_WEB_RESOURCES MWR INNER JOIN
    MSP_PROJECTS MP INNER JOIN
    MSP_ASSIGNMENTS MA ON MP.PROJ_ID = MA.PROJ_ID INNER JOIN
    MSP_TASKS MT ON MA.TASK_UID = MT.TASK_UID AND MP.PROJ_ID = MT.PROJ_ID INNER JOIN
    MSP_RESOURCES MR ON MP.PROJ_ID = MR.PROJ_ID AND MA.RES_UID = MR.RES_UID ON MWR.RES_NAME = MR.RES_NAME
     
    WHERE (MWR.WRES_IS_ENABLED = 0))
    Testé.. mais ca ne marche pas, car les champs RES_UID / TASK_UID / PROJ_ID sont de type INT et n'accepte pas d'etre additionnés avec un "$".

  14. #14
    Membre averti Avatar de Shivaneth
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 349
    Points : 341
    Points
    341
    Par défaut
    Citation Envoyé par marye77 Voir le message
    Testé.. mais ca ne marche pas, car les champs RES_UID / TASK_UID / PROJ_ID sont de type INT et n'accepte pas d'etre additionnés avec un "$".
    essaye en castant les entier en varchar avec CAST
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UPDATE MSP_ASSIGNMENTS
    SET ASSN_REM_WORK = 0, ASSN_WORK = ASSN_ACT_WORK
    WHERE CAST(RES_UID AS VARCHAR)+'$'+CAST(TASK_UID AS VARCHAR)+'$'+CAST(PROJ_ID AS VARCHAR) IN (SELECT CAST(MA.RES_UID AS VARCHAR)+'$'+CAST(MA.TASK_UID AS VARCHAR)+'$'+CAST(MA.PROJ_ID AS VARCHAR)
     
    FROM MSP_WEB_RESOURCES MWR INNER JOIN
    MSP_PROJECTS MP INNER JOIN
    MSP_ASSIGNMENTS MA ON MP.PROJ_ID = MA.PROJ_ID INNER JOIN
    MSP_TASKS MT ON MA.TASK_UID = MT.TASK_UID AND MP.PROJ_ID = MT.PROJ_ID INNER JOIN
    MSP_RESOURCES MR ON MP.PROJ_ID = MR.PROJ_ID AND MA.RES_UID = MR.RES_UID ON MWR.RES_NAME = MR.RES_NAME
     
    WHERE (MWR.WRES_IS_ENABLED = 0))
    ou CONVERT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UPDATE MSP_ASSIGNMENTS
    SET ASSN_REM_WORK = 0, ASSN_WORK = ASSN_ACT_WORK
    WHERE CONVERT(varchar,RES_UID)+'$'+CONVERT(varchar,TASK_UID)+'$'+CONVERT(varchar,PROJ_ID) IN (SELECT CONVERT(varchar,MA.RES_UID)+'$'+CONVERT(varchar,MA.TASK_UID)+'$'+CONVERT(varchar,MA.PROJ_ID)
     
    FROM MSP_WEB_RESOURCES MWR INNER JOIN
    MSP_PROJECTS MP INNER JOIN
    MSP_ASSIGNMENTS MA ON MP.PROJ_ID = MA.PROJ_ID INNER JOIN
    MSP_TASKS MT ON MA.TASK_UID = MT.TASK_UID AND MP.PROJ_ID = MT.PROJ_ID INNER JOIN
    MSP_RESOURCES MR ON MP.PROJ_ID = MR.PROJ_ID AND MA.RES_UID = MR.RES_UID ON MWR.RES_NAME = MR.RES_NAME
     
    WHERE (MWR.WRES_IS_ENABLED = 0))
    Shiv@ Skunk

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut YESSS
    Ca marche ! Je t'adore !!!

    Merci beaucoup !!

  16. #16
    Membre averti Avatar de Shivaneth
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 349
    Points : 341
    Points
    341
    Par défaut
    Citation Envoyé par marye77 Voir le message
    Ca marche ! Je t'adore !!!

    Merci beaucoup !!
    Je fais souvent cet effet là
    Shiv@ Skunk

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

Discussions similaires

  1. Requête update avec select imrbiqué
    Par Woufeigh dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/05/2008, 00h43
  2. Requête Update avec Select.
    Par franzarelli dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/03/2008, 05h33
  3. UPDATE avec SELECT sur la même table
    Par Invité dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/12/2007, 03h39
  4. Requete Update avec Select imbriqué: etrange resultat!
    Par corentone dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/08/2007, 15h05
  5. essai "debuter avec hibernate" avec MYSQL et j'y arrive pas
    Par alligator424 dans le forum Hibernate
    Réponses: 5
    Dernier message: 08/08/2007, 14h02

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