将PLSQL select语句转换为更新

时间:2016-02-02 15:36:09

标签: plsql

伙计我有这样的问题。

我知道如何编写一个好的选择语句,但我不知道如何将其转换为相应的更新。

我还在学习plsql

这是我的选择

select * --count(*) 
from POLISY_OT ot
  join polisy p on p.poli_id = ot.ot_poli_id
  join sou.rai_skl rs on rs.ot_id = ot.ot_id
where ot_under_promil = 0 
  and ot_skladka_rok <> ot_skladka_netto_rok 
  and ot_rodzaj_um = 'OP' 
  and ot_rodzaj = 'D'
  and ot_produkt_id = 17
  and p.poli_status in ('AK', 'CZ')
  and rs.skl_roczna = ot.ot_skladka_rok;

现在我想用更新来包装它并创建类似这样的东西

update (
  select * --count(*) 
  from POLISY_OT ot
    join polisy p on p.poli_id = ot.ot_poli_id
    join sou.rai_skl rs on rs.ot_id = ot.ot_id
  where ot_under_promil = 0 
    and ot_skladka_rok <> ot_skladka_netto_rok 
    and ot_rodzaj_um = 'OP' 
    and ot_rodzaj = 'D'
    and ot_produkt_id = 17
    and p.poli_status in ('AK', 'CZ')
    and rs.skl_roczna = ot.ot_skladka_rok)
  set ot_skladka_rok = ot_skladka_netto_rok;

1 个答案:

答案 0 :(得分:0)

首先,我真的希望你不是一个要求做作业帮助的学生。 真的让我感到烦恼。

假设不是,考虑到你没有在整个表中包含表别名,确切地说哪些列属于哪些表是有点困难的。

我读到这个是因为你想根据另一个表中的值更新列,将表更新限制为与第三个表匹配的记录。)

所以我认为你想要这样的东西:

UPDATE polisy_ot ot
   SET ot_skladka_rok =
       (SELECT ot_skladka_netto_rok
          FROM sou.rai_skl rs
         WHERE rs.ot_id = ot.ot_id
           AND rs.skl_roczna = ot.ot_skladka_rok)
 WHERE ot_under_promil = 0
   AND ot_skladka_rok <> ot_skladka_netto_rok
   AND ot_rodzaj_um = 'OP'
   AND ot_rodzaj = 'D'
   AND ot_produkt_id = 17
   AND EXISTS (SELECT NULL
          FROM polisy p
         WHERE p.poli_id = ot.ot_poli_id
           AND p.poli_status IN ('AK', 'CZ'))
祝你好运,