update if exists sur une meme table

update if exists sur une meme table - SQL/NoSQL - Programmation

Marsh Posté le 12-10-2005 à 13:31:10    

bonjour,
 
je cherche à faire un update if exists sur une même table. Malheureusement je ne peux pas aliasser ma table dans un update, quelqu'un peut il m'expliquer comment faire.
Pour information: ma base est de l'oracle.
 
voici le select qui fonctionne:
 
select *
from fp_active f1
where f1.date_debut_validite =to_date('20050921','YYYYMMDD')
and f1.etat ='F'
and exists(
select 1
from fp_active f2
where  f1.client = f2.client
and f1.compte = f2.compte
and f1.code = f2.code
and  f2.date_debut_validite = to_date('20051021','YYYYMMDD')
and f2.etat = 'A')

 
voici un update que j'ai essayé mais sans succé car je n'ai pas le même nombre de ligne modifier que dans mon select.
 
update fp_active
set etat = 'A'
where date_debut_validite =to_date('20050921','YYYYMMDD')
and etat ='F'
and exists(
select 1
from fp_active f2
where  client = f2.client
and compte = f2.compte
and code = f2.code
and  f2.date_debut_validite = to_date('20051021','YYYYMMDD')
and f2.etat = 'A')

 
Merci d'avance.
 

Reply

Marsh Posté le 12-10-2005 à 13:31:10   

Reply

Marsh Posté le 12-10-2005 à 14:08:35    

j'ai résolu mon problème en créant une table temporaire avec les rowid de mon select puis faire un update avec une jointure.
Mais si quelqu'un avait la solution pour mon pb cela serait sympa de l'ecrire.
 
Merci

Reply

Marsh Posté le 12-10-2005 à 14:31:14    

Quel SGBD ?
 
Et pourquoi tu peux pas utiliser d'alias dans l'update ?
 
edit: ça doit être Oracle, vu que tu utilises TO_DATE.
 
J'ai testé en créant une structure ressemblant à ta table, et l'update avec alias marche très bien :
 

Code :
  1. CREATE TABLE fp_active
  2. (client NUMBER(9),
  3. compte NUMBER(9),
  4. code NUMBER(9),
  5. date_debut_validite DATE,
  6. etat VARCHAR2(1)
  7. );
  8. (Table created)
  9. UPDATE fp_active f1
  10. SET etat = 'A'
  11. WHERE f1.date_debut_validite =TO_DATE('20050921','YYYYMMDD')
  12. AND f1.etat ='F'
  13. AND EXISTS(
  14. SELECT 1
  15. FROM fp_active f2
  16. WHERE  f1.client = f2.client
  17. AND f1.compte = f2.compte
  18. AND f1.code = f2.code
  19. AND  f2.date_debut_validite = TO_DATE('20051021','YYYYMMDD')
  20. AND f2.etat = 'A');
  21. (0 rows updated)


Message édité par Beegee le 12-10-2005 à 14:35:17
Reply

Marsh Posté le 14-10-2005 à 10:26:33    

[Pour information: ma base est de l'oracle. ]
Oui ma base est de l'oracle.
 
Merci pour le test, je vais voir pourquoi cela ne fonctionnait pas.

Reply

Sujets relatifs:

Leave a Replay

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