Обновление одной таблицы с использованием данных из другой таблицы - Oracle - PullRequest
1 голос
/ 22 марта 2012

Вот мой пробный запрос.Я пытаюсь обновить TABLE1 таблицу с соответствующими данными из ADDR на основе person_id.Это ниже говорит об отсутствии ключевого слова SET.

UPDATE TABLE1 CFI
INNER JOIN 
(
  SELECT ADDRESS_LINE1, ADDRESS_LINE2, CITY, STATE_PROVINCE, ZIP FROM ADDR WHERE PERSON_ID = CFI.PERSON_ID AND STATUS = 'Active' 
) AS ADDR_DATA
SET CFI.PAYEE_ADDRESS1 = ADDR_DATA.ADDRESS_LINE1, 
    CFI.PAYEE_ADDRESS2 = ADDR_DATA.ADDRESS_LINE2, 
    CFI.PAYEE_CITY= ADDR_DATA.CITY, 
    CFI.PAYEE_STATE_PROVINCE = ADDR_DATA.STATE_PROVINCE,
    CFI.PAYEE_POSTALCODE = ADDR_DATA.ZIP, 
    CFI.PAYEE_COUNTRY_CODE = 'USA'    
WHERE CFI.CUSTOMER_INSTITUTION_ID = 966362 AND CFI.PERSON_ID = ADDR_DATA.PERSON_ID;

Пожалуйста, помогите.Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

Это было бы

UPDATE TABLE1 CFI
    SET (PAYEE_ADDRESS1, PAYEE_ADDRESS2, PAYEE_CITY, PAYEE_STATE_PROVINCE, PAYEE_POSTALCODE, PAYEE_COUNTRY_CODE) =
        (SELECT ADDRESS_LINE1, ADDRESS_LINE2, CITY, STATE_PROVINCE, ZIP, 'USA' FROM ADDR WHERE PERSON_ID = CFI.PERSON_ID AND STATUS = 'Active')
    WHERE CFI.CUSTOMER_INSTITUTION_ID = 966362;

РЕДАКТИРОВАТЬ: исправлена ​​ошибка (надеюсь)

1 голос
/ 22 марта 2012
MERGE INTO TABLE1
USING (
       SELECT PERSON_ID, 
              ADDRESS_LINE1, ADDRESS_LINE2, CITY, STATE_PROVINCE, ZIP 
         FROM ADDR 
        WHERE STATUS = 'Active' 
      ) ADDR_DATA
   ON TABLE1.PERSON_ID = ADDR_DATA.PERSON_ID 
      AND TABLE1.CUSTOMER_INSTITUTION_ID = 966362 
WHEN MATCHED THEN 
   UPDATE
      SET PAYEE_ADDRESS1 = ADDR_DATA.ADDRESS_LINE1, 
          PAYEE_ADDRESS2 = ADDR_DATA.ADDRESS_LINE2, 
          PAYEE_CITY = ADDR_DATA.CITY, 
          PAYEE_STATE_PROVINCE = ADDR_DATA.STATE_PROVINCE,
          PAYEE_POSTALCODE = ADDR_DATA.ZIP, 
          PAYEE_COUNTRY_CODE = 'USA';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...