Oracle update语句错误

时间:2013-01-01 16:21:47

标签: oracle subquery

我需要根据匹配的assignment_type_desc更新表randm_sampler中名为clm_snapshot的列,其中包含来自源表claim_id的值。问题是clm_snapshot中有两条记录,其中claim_idassignment_type_descNOT NULL的值不同。我不需要这些记录,因此我在update语句中包含了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 ) 条件。但是update语句仍然返回单行子查询返回多行错误。

NULL

我绝对肯定的是,重复项来自claim_id NOT NULL值{1}}的记录。但{{1}}条件在这里似乎没有效果。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分: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会让事情变得更糟。并且外表没有任何联系。