更新Oracle表以获取多个记录

时间:2010-11-24 04:29:31

标签: sql oracle oracle10g

我的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。

例如在上面的场景中,前两个记录的IM_FP表中的FP_STATUS将为FALSE,第三个记录将为TRUE

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

会给我所有重复的AM_ID。

请帮忙

1 个答案:

答案 0 :(得分: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');