oracle中的UPDATE FROM 解决方法

来源:互联网 发布:linux的less命令 编辑:程序博客网 时间:2024/03/29 18:42

ORACLE中没有类似SQL SERVER的update from功能

一个解决的办法是

/* Formatted on 2004/10/26 11:15 (Formatter Plus v4.5.2) */
UPDATE tablea a
   SET a.fieldforupdate =
            (SELECT b.fieldsource
               FROM tableb b
              WHERE a.keyfield = b.keyfield)
 WHERE EXISTS (
              SELECT b.fieldsource
                FROM tableb b
               WHERE a.keyfield = b.keyfield)



例子

表text

  fielda                fieldb               fieldc
  1                2004-1-1        2004-2-1 
  2                2004-2-2        2004-3-1
  3                2004-3-1        2004-4-1

如果要根据记录2的b字段值更新记录1的c字段值则可以使用如下sql

/* Formatted on 2004/10/26 11:25 (Formatter Plus v4.5.2) */
UPDATE text a
   SET a.fieldb = (SELECT b.fieldb
                     FROM text b
                    WHERE a.fielda = b.fielda
                      AND b.fieldb > a.fieldb
                      AND   b.fieldb
                          - a.fieldb <= 35)
 WHERE EXISTS ( SELECT b.fieldb
                  FROM text b
                 WHERE a.fielda = b.fielda
                   AND b.fieldb > a.fieldb
                   AND   b.fieldb
                       - a.fieldb <= 35)