oracle中的UPDATE FROM 解决方法

来源:互联网 发布:品牌网络授权书 编辑:程序博客网 时间:2024/04/19 20:19
oracle中的UPDATE FROM 解决方法

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)




[点击此处收藏本文]
发表于 2004年10月26日 12:21 PM

zzz 发表于2004-12-16 7:47 AM  
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)

这个语句中SELECT b.fieldsource
FROM tableb b
WHERE a.keyfield = b.keyfield
的值只能是一个具体的值,不能是数据集