SQL Inner Join w Обновление - PullRequest
       6

SQL Inner Join w Обновление

0 голосов
/ 25 марта 2020

У меня есть две таблицы. Я пытаюсь обновить код состояния в первом месте, где он неправильный (> 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

Заранее спасибо за любую помощь, которую вы можете оказать!

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Ваша подсказка просто пахнет Oracle, которая не поддерживает JOIN s в UPDATE s (для большинства целей).

Вы можете сделать:

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;
1 голос
/ 25 марта 2020

Можете ли вы попробовать это?

UPDATE  ATEST
SET ATEST.ST1 =  AZIP_INFO.ST
FROM ATEST
INNER JOIN AZIP 
ON TRIM(ATEST.ZIP) = AZIP_INFO.ZIP
WHERE LENGTH(ATEST.ST1) > 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...