2010-11-24 9 views
1

J'ai deux tables dans ma base de données Oracle comme indiqué ci-dessousTable mise à jour Oracle pour plusieurs enregistrements

**IM_FP** 
FP_ID 
FP_NAME 
FP_STATUS 

**IM_FP_DTL** 
FP_DTL_ID 
FP_ID 
IM_ID 
FP_DATE 

FP_ID FP_NAME FP_STATUS 
1   ABC  TRUE 
2   DEF  TRUE 
3   GHI  TRUE 
4   TEC  TRUE 
5   KEC  TRUE 

FP_DTL_ID   FP_ID IM_ID  FP_DATE 
1     1  1  1-JAN-1996 
2     2  1  10-JAN-1996 
3     3  1  2-FEB-1996 
4     4  2  1-JAN-1996 
5     5  3  2-JAN-2010 

Il y a une relation entre les deux 1-1 les tables. Mais l'identificateur IM_ID peut être dupliqué dans la table FP_DTL et mettre à jour la valeur FP_STATUS dans la table IM_FP à false pour tous les enregistrements, mais True pour l'enregistrement avec MAX (FP_DTL_ID).

Par exemple, dans le scénario ci-dessus, FP_STATUS dans le tableau IM_FP pour les deux premiers enregistrements seront faux et le troisième enregistrement sera vrai

Select IM_ID from FP_DTL GROUP BY IM_ID HAVING COUNT(IM_ID)>1 

me donner toutes les AM_ID qui sont des doublons.

S'il vous plaît aider

Répondre

0

Que diriez-vous:

UPDATE IM_FP 
SET FP_STATUS = 'TRUE' 
WHERE FP_ID IN 
    (SELECT MAX(FP_DTL_ID) 
    FROM IM_FP_DTL 
    GROUP BY IM_ID) 
AND (FP_STATUS IS NULL OR FP_STATUS != 'TRUE'); 

UPDATE IM_FP 
SET FP_STATUS = 'FALSE' 
WHERE FP_ID NOT IN 
    (SELECT MAX(FP_DTL_ID) 
    FROM IM_FP_DTL 
    GROUP BY IM_ID) 
AND (FP_STATUS IS NULL OR FP_STATUS != 'FALSE'); 
Questions connexes