2010-11-24 110 views
1

我有幾個在我的Oracle數據庫中的表如下圖所示多個記錄的更新Oracle表

**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 

有兩個表之間的關係,1-1。但是,IM_ID可以在FP_DTL表中複製,並將IM_FP表中的FP_STATUS值更新爲所有記錄爲false,但對於具有MAX(FP_DTL_ID)的記錄,則更新爲True。

例如,在上述情況下,FP_STATUS在IM_FP表第2條記錄將是FALSE和第三記錄將是TRUE

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

將會給我的一切,是重複的AM_ID。

請幫

回答

0

如何:

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');