填写关于记录是否存在Oracle SQL的逻辑字段

时间:2014-07-23 19:00:47

标签: sql oracle11g

现在我有:

UPDATE table_name
   SET logical_field = 0 
 WHERE logical_field != 0
;

UPDATE table_name t 
   SET t.logical_field = 1 
 WHERE EXISTS 
   (SELECT 1
      FROM other_table s 
     WHERE s.key_field = t.key_field)
   AND t.logical_field != 1
;

这是我的代码的简化版本。我想要一个声明,根据另一个记录的存在设置逻辑,如果不需要则不更新它。

我查看了'解码'语句,我认为这可行。解码是最好的,还是有更简单的方法。

使用:Oracle 11g

1 个答案:

答案 0 :(得分:0)

我想我的解码工作正常。让我知道你的想法和/或是否有更好的方式来学习它。

UPDATE table_name t 
   SET t.logical_field =
         decode((SELECT distinct s.key_field
                   FROM other_table s 
                  WHERE s.key_field = t.key_field), t.key_field, 1, 0)
 WHERE t.logical_field != 
         decode((SELECT distinct s.key_field
                   FROM other_table s 
                  WHERE s.key_field = t.key_field), t.key_field, 1, 0)
;