UPDATE JOIN Oracle - SQL/NoSQL - Programmation
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...
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,