faire un update avec une jointure oracle

faire un update avec une jointure oracle - SQL/NoSQL - Programmation

Marsh Posté le 08-08-2005 à 11:56:49    

bonjour,
 
j'ai besoin d'un coup de pouce pour ma requete SQL.
J'ai table1 avec colonne NO_MSG, CLE, VAL et table 2 avec NO_MSG, CODE_ERR
 
Je voudrais update la colonne VAL de la table1 lorqsue table1.NO_MSG=table2.NO_MSG and COE_ERR='E'.
 
J'ai tenté ca mais ca marche pas... ca s'execute mas 5H apres la requete est tj pa fini ..
update table1 set VAL='I' where (select 1 from table1, table2 where CODE_ERR='E' and table1.NO_MSG=table2.NO_MSG)
 
une petite correction svp ;-)
 
merci
 
olivier
 
PS: je suis sous oracle 8.1.7


Message édité par olicel le 08-08-2005 à 11:57:03
Reply

Marsh Posté le 08-08-2005 à 11:56:49   

Reply

Marsh Posté le 08-08-2005 à 12:01:49    

déjà, "where exists" sera mieu (rajoute simplement le "exists" )
 
sinon, avec sql server, il y a une syntaxe permettant de faire directement une jointure lors de l'update. ce n'est pas la même syntaxe mais bon, ça te donne au moins l'info :
 
update table1
set val = 'I'
from table2
where no_msg = table2.no_msg
and table2.code_err = 'E'

Reply

Marsh Posté le 08-08-2005 à 12:36:23    

oui je mettais le existe ;-) oublié de le mettre sur le forum.
voici une copie de ma requete... mais ca marche pas ca met 2000plombes... et ca se debloque jamais.

Reply

Marsh Posté le 08-08-2005 à 12:36:37    

update HOSTCOM_MSG_DETAIL set VAL='I' where exists
(select 1 from HOSTCOM_MSG_DETAIL d, HOSTCOM_MSG_RECU m where d.VAL='R' and m.ETAT_MSG='E' and m.MSG_ERR LIKE '%ORA-20178%' and d.CLE='I_PV1_CLASS' and d.NO_HOSTCOM_MSG=m.NO_HOSTCOM_MSG)

Reply

Marsh Posté le 08-08-2005 à 13:05:29    

essaye :
 

Code :
  1. update HOSTCOM_MSG_DETAIL d set VAL='I' where exists
  2. (select 1 from HOSTCOM_MSG_RECU m where d.VAL='R' and m.ETAT_MSG='E' and m.MSG_ERR LIKE '%ORA-20178%' and d.CLE='I_PV1_CLASS' and d.NO_HOSTCOM_MSG=m.NO_HOSTCOM_MSG)

Reply

Marsh Posté le 08-08-2005 à 13:09:52    

A mon avis, il te manque une condition supplémentaire dans ton WHERE, parce que là, tu vas mettre 'I' partout ou nul part, selon que ton sous-select sera vrai ou faux.

Reply

Marsh Posté le 08-08-2005 à 14:13:16    

en effet, la solution d'OraFrance me semble mieu, celle d'olicel est buggée en effet !

Reply

Marsh Posté le 08-08-2005 à 14:19:36    

c bon j'ai tenté celle d'orafrance, et j'ai compris ma betise. merci a tous

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed