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] Probleme d'ecriture d'une requete


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Points : 147
    Points
    147
    Par défaut [update] Probleme d'ecriture d'une requete
    Bonjour,
    Mon probleme peut paraitre simple, mais je ne parviens pas a m'en sortir.
    Voila, je dois mettre a jours une table a partir d'autre table....
    J'ai besoin de faire des jointures dans un update...
    genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    update MaTable
    set MaTable.Colonne1 = MaTable2.Colonne2
    where MaTable.Colonne3 = MaTable2.Colonne4
    Merci

    PS : est ce que je peut mettre des if dans les clauses set?

  2. #2
    Membre habitué Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Points : 147
    Points
    147
    Par défaut
    En fait j'aimerai faire un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    update 	ID_EVT evt, 
    		INSTRUMENT i, 
    		ID_DAT a, 
    		ID_DAT dat
    set evt.XACT_DAT			= dat.DAT_REF
    set evt.EVT_PROB			= case rtrim(i.SECT_C1) when null then 1
    					  else 0 end
    set i.CPN_NEXT_AMT		= case rtrim(i.SECT_C1) when null then i.GIVN_RATE_FIXED
    					  else 0 end
    where e.XACTC_TYP			= 'CAPLET'
      and e.EVT_DAT			= e.IDX_VALUE_DAT
      and e.INST_CONT_NUM		= i.INST_NUM
      and (case rtrim(i.CTRY_ACR)
    	 when null then 'FRA'
    	 else i.CTRY_ACR end)	= a.COUNTRY
      and e.EVT_DAT			= a.DAT_REF
      and a.COUNTRY			= dat.COUNTRY
      and a.DAT_OPEN_NUM-5 		= dat.DAT_OPEN_NUM

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    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 103
    Points : 28 394
    Points
    28 394
    Par défaut
    SQL n'autorise pas la mise à jour de plusieurs tables, ce que semble suggérer ton exemple.
    Par ailleurs, tu ne précises pas quel est ton SGBD.

  4. #4
    Membre habitué Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Points : 147
    Points
    147
    Par défaut
    Je suis sous sybase
    version : Adaptive Server Enterprise/12.0.0.8/P/EBF 11874 ESD2/Sun_svr4/OS 5.7/2058/64bit/FBO/Thu May 20 09:12:03 2004

  5. #5
    Membre habitué Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Points : 147
    Points
    147
    Par défaut
    J'ai modifié comme ceci, mais cela ne marche toujours pas :S

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    update ID_EVT
    set XACT_DAT	= dat.DAT_REF
    set EVT_PROB	= case rtrim(i.SECT_C1) when null then 1
    			  else 0 end
    from	ID_EVT e, 
    	INSTRUMENT i, 
    	DAT_REF dat, 
    	DAT_REF a
    where e.XACTC_TYP			= 'CAPLET'
      and e.EVT_DAT			= e.IDX_VALUE_DAT
      and e.INST_CONT_NUM		= i.INST_NUM
      and (case rtrim(i.CTRY_ACR)
    	 when null then 'FRA'
    	 else i.CTRY_ACR end)	= a.COUNTRY
      and e.EVT_DAT			= a.DAT_REF
      and a.COUNTRY			= dat.COUNTRY
      and a.DAT_OPEN_NUM-5 		= dat.DAT_OPEN_NUM
    Il ne reconnait pas "dat" ici je pense : set XACT_DAT = dat.DAT_REF

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    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 103
    Points : 28 394
    Points
    28 394
    Par défaut
    Je ne connais pas spécifiquement Sybase ASE mais, en général, pour d'autres SGBD acceptant la clause FROM dans la commande UPDATE, il ne faut pas répéter la table mise à jour dans la clause FROM.
    Par ailleurs, quel que soit le SGBD, il ne faut pas répéter la commande SET à chaque colonne mise à jour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    update ID_EVT
    set XACT_DAT	= dat.DAT_REF
      , EVT_PROB	= case rtrim(i.SECT_C1) when null then 1
    			  else 0 end
    from	INSTRUMENT i, 
    	DAT_REF dat, 
    	DAT_REF a
    where ID_EVT.XACTC_TYP			= 'CAPLET'
      and ID_EVT.EVT_DAT			= ID_EVT.IDX_VALUE_DAT
      and ID_EVT.INST_CONT_NUM		= i.INST_NUM
      and (case rtrim(i.CTRY_ACR)
    	 when null then 'FRA'
    	 else i.CTRY_ACR end)	= a.COUNTRY
      and ID_EVT.EVT_DAT			= a.DAT_REF
      and a.COUNTRY			= dat.COUNTRY
      and a.DAT_OPEN_NUM - 5	= dat.DAT_OPEN_NUM

  7. #7
    Membre régulier Avatar de Arvulis
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 117
    Points : 73
    Points
    73
    Par défaut
    Dans ce genre de cas, il faut passer par un programme..
    C'est Vrai que cette histoire de ne pas pouvoir faire de jointure dans un Update est bête...

    J'ai déjà rencontré ce type de probleme par le passé.

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

Discussions similaires

  1. [AC-2002] Probleme dans l'ecriture d'une requete
    Par orion_ dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/10/2009, 16h44
  2. probleme d'execution d'une requete sql
    Par rootdaoud dans le forum SGBD
    Réponses: 2
    Dernier message: 13/09/2005, 17h15
  3. Probleme de logique dans une requete
    Par linou dans le forum Langage SQL
    Réponses: 11
    Dernier message: 18/03/2005, 19h52
  4. Probleme d'execution d'une requete avec un Count
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 23/06/2004, 10h33
  5. Réponses: 13
    Dernier message: 14/06/2003, 22h15

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