2013-01-01 59 views
0

我需要根据匹配的claim_id更新表randm_sampler中来自源表clm_snapshot的值的列assignment_type_desc。问题是在clm_snapshot中有两条记录,其中有空claim_idassignment_type_desc的值不同。我不需要这些记录,因此我在更新语句中包含了NOT NULL条件。但更新语句仍然返回单行子查询返回多行错误。Oracle更新声明错误

UPDATE RANDM_SAMPLER SET ASSIGNMENT_TYPE_DESC = 
    (SELECT DISTINCT A.ASSIGNMENT_TYPE_DESC 
    FROM CLM_SNAPSHOT A, 
      RANDM_SAMPLER B 
    WHERE A.CLAIM_ID = B.CLAIM_ID 
     AND A.CURRENT_SNAPSHOT_IND='Y' 
     AND A.HO_CONSULTANT_SEQ_NBR = (SELECT MAX(HO_CONSULTANT_SEQ_NBR) 
             FROM CLM_SNAPSHOT C 
             WHERE A.CLAIM_ID = C.CLAIM_ID 
             AND C.CLAIM_ID IS NOT NULL 
             GROUP BY CLAIM_ID) 
     AND A.CLAIM_ID IS NOT NULL) 

我绝对肯定的是,重复从具有对claim_idNULL值的记录。但NOT NULL条件似乎并没有在这里有效。有人可以帮我解决这个问题吗?

回答

2

尝试以下UPDATE语句:

UPDATE RANDM_SAMPLER SET ASSIGNMENT_TYPE_DESC = 
    (SELECT DISTINCT A.ASSIGNMENT_TYPE_DESC 
    FROM CLM_SNAPSHOT A 
    WHERE A.CLAIM_ID = RANDM_SAMPLER.CLAIM_ID 
     AND A.CURRENT_SNAPSHOT_IND='Y' 
     AND A.HO_CONSULTANT_SEQ_NBR = (SELECT MAX(HO_CONSULTANT_SEQ_NBR) 
             FROM CLM_SNAPSHOT C 
             WHERE A.CLAIM_ID = C.CLAIM_ID 
             AND C.CLAIM_ID IS NOT NULL 
             GROUP BY CLAIM_ID) 
     AND A.CLAIM_ID IS NOT NULL) 

我已经移除子查询的JOIN来RANDM_SAMPLER,而是补充说,真的很重要,因为它使链接表中要更新的条件:

A.CLAIM_ID = RANDM_SAMPLER.CLAIM_ID 

您可能尝试过,但添加表B使情况变得更糟。并没有连接到外部的桌子。