首页 > 解决方案 > SQL 内连接 w 更新

问题描述

我有两张桌子。我正在尝试通过邮政编码将其链接到另一个表来更新第一个不正确的状态代码(> 2 个字符)。

我的代码中不断出现错误,提示连接没有正确结束——我已经盯着它看了两个多小时——看起来很简单,但我就是看不到错误?

Table Name – ATEST
ZIP     CITY              ST1
19090   WILLOW GROVE       PA
19091   MEDIA              PA
19092   PHILADELPHIA       PA
19093   PHILATEST          PENN
19094   WOODLYN            PA
95123   SAN JOSE           CA
95124   SAN JOSETEST       CAA

Table Name – AZIP_INFO
ZIP     CITY            ST
19090   WILLOW GROVE    PA
19091   MEDIA           PA
19092   PHILADELPHIA    PA
19093   PHILATEST       PA
19094   WOODLYN         PA
95123   SAN JOSE        CA
95124   SAN JOSETEST    CA


UPDATE  /*+ parallel(2) */ ATEST
SET (ATEST.ST1) = (AZIP_INFO.ST)
INNER JOIN (ATEST.ZIP) = AZIP_INFO.ZIP)
ON (TRIM (ATEST.ZIP) = AZIP_INFO.ZIP)
WHERE LENGTH(ATEST.ST1) > 2

提前感谢您提供的任何帮助!

标签: sqlinner-join

解决方案


您的提示只是 Oracle 的味道,它不支持JOINs in UPDATEs (对于大多数目的)。

你可以做:

UPDATE ATEST a
    SET a.ST1 = (SELECT ai.ST
                 FROM AZIP_INFOR ai
                 WHERE a.ZIP = ai.ZIP
                )
    WHERE EXISTS (SELECT 1
                  FROM AZIP_INFOR ai
                  WHERE a.ZIP = ai.ZIP
                 )
    WHERE LENGTH(a.ST1) > 2;

推荐阅读