如何根据标识的行更新特定行

时间:2014-10-16 09:53:08

标签: sql oracle

已根据数据中的唯一ID识别出特定行。我想将这些行更新为一列。尝试使用更新命令,但它无法正常工作

UPDATE L03_A_AVOX_DATA
   SET PWC_Exclusion_Flag =
          (CASE 
             WHEN (L03_A_AVOX_DATA.PWC_SEQ_AVOX IN
                      (SELECT  PWC_SEQ_AVOX
                         FROM L03_A_AVOX_DATA
                        WHERE     client_id IN
                                     (SELECT DISTINCT client_id
                                        FROM (  SELECT DISTINCT
                                                       client_id,
                                                       extract_type,
                                                       COUNT (*)
                                                  FROM temp
                                              GROUP BY client_id,
                                                       extract_type
                                                HAVING COUNT (*) = 1))
                              AND extract_type = '0'))
             THEN
                1
             ELSE
                L03_A_AVOX_DATA.PWC_Exclusion_Flag
          END )

任何人都可以帮助我

2 个答案:

答案 0 :(得分:1)

您应该通过尝试使用JOIN模拟UPDATE来简化此语句。

有关详细信息,请参阅此处:

Update statement with inner join on Oracle

这个想法也适合你的情况。

那么那些在temp表格中有对应物的记录就会更新它们 那些没有对应物的人 - 似乎你不想再更新它们。

答案 1 :(得分:0)

如果client_id在临时表中只有1条extract_type 0记录,您是否正在尝试将PWC_Exclusion_Flag更新为1,我是对的吗?

试试这个:

update L03_A_AVOX_DATA
set PWC_Exclusion_Flag = 1
where client_id in (
  select client_id
  from temp
  where extract_type = '0'
  group by client_id
  having count(1) = 1
);

这也使L03_A_AVOX_DATA中的其他记录保持不变。

相关问题