UPDATE JOIN Oracle

UPDATE JOIN Oracle - SQL/NoSQL - Programmation

Marsh Posté le 02-03-2011 à 14:52:21    

Bonjour à tous,
 
Je rencontre un petit problème d'UPDATE sous Oracle, voila, j'ai 2 tables :  
 
INFO_MODULE (id_module, id_produit, date_deb_analyse)
SAISON (id_module, date_deb_saison, date_fin_saison)
 
Je dois mettre à jour date_deb_analyse avec (date_deb_saison - 1 an) si sysdate > date_fin_saison...
 
Ca me semblait tout bête, mais je ne m'en sors pas...
 
Voici le select :  
 
SELECT *
FROM INFO_MODULE IM
INNER JOIN SAISON SA ON SA.id_module = IM.id_module
WHERE trunc(SYSDATE) > SA.date_fin_saison
 
(bon, en l'état, cette requête me renvoit 0 ligne puisque aucun enregistrement de SAISON ne respecte la clause WHERE, donc je triche un peu et je remplace trunc(SYSDATE) par to_date('01/06/2011', 'DD/MM/YYYY')
 
==>  
 
SELECT *
FROM INFO_MODULE IM
INNER JOIN SAISON SA ON SA.id_module = IM.id_module
WHERE to_date('01/06/2011', 'DD/MM/YYYY') > SA.date_fin_saison
 
dans ce cas j'ai 97 id_module dans SAISON qui remplissent les critères, et ça me sort donc 1369 lignes de la table INFO_MODULE...
 
Mais je n'arrive pas à écrire l'UPDATE...
 
J'ai essayé de reprendre des UPDATE ou des MERGE que j'avais déjà écrit, mais ça ne passe jamais, si quelqu'un avait une idée...
 
Merci,

Reply

Marsh Posté le 02-03-2011 à 14:52:21   

Reply

Marsh Posté le 02-03-2011 à 15:16:11    

Bon Ok, j'ai trouvé... (enfin, j'ai trouvé sur une page Web, je n'aurai jamais fait comme ça, venant de SQLServer...) :  
 
UPDATE INFO_MODULE IM
SET IM.date_deb_analyse =  
    (
    SELECT add_months(SA.date_deb_saison, -12)  
    FROM SAISON SA
    WHERE IM.id_module = SA.id_module
    )
WHERE EXISTS  
      (
      SELECT 1  
      FROM SAISON SA
      WHERE SA.id_module = IM.id_module  
      AND to_date('01/06/2011', 'DD/MM/YYYY') > SA.date_fin_saison
      )
 
Ca me met bien à jour 1369 lignes...

Reply

Sujets relatifs:

Leave a Replay

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