SQL UPDATE данные из одного столбца с совпадением из другого столбца - PullRequest
0 голосов
/ 08 июня 2018

У меня есть две таблицы SQL - одна таблица MODEL только с тремя столбцами, а другая моя таблица MASTER со всеми данными.Я добавил новый столбец (MODEL_LONG) в таблицу MASTER.Теперь мне нужно обновить этот новый столбец данными из таблицы MODEL.

В таблице MODEL всего около 40 записей.Первый столбец - это столбец MODEL, два других - MODEL_SHORT (сокращенные названия модели) и MODEL_LONG (полные названия моделей).

Мне нужно заполнить новый столбец MODEL_LONG, который я только что добавил в таблицу MASTER.Мне нужно проверить, какое имя MODEL содержится в каждой записи MASTER TABLE, и обновить столбец MODEL_LONG в таблице MASTER, указав соответствующее имя MODEL_LONG в таблице MODEL.

Следующее не работает (в Oracle SQLРазработчик).Что мне здесь не хватает?

UPDATE MASTER
SET MASTER.MODEL_LONG = MODEL.MODEL_LONG
FROM MASTER JOIN MODEL
ON MASTER.MODEL = MODEL.MODEL;

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Вы можете использовать оператор слияния для обновления MASTER TABLE

MERGE INTO MASTER 
USING (SELECT * FROM MODEL) MODEL
ON (MASTER.MODEL = MODEL.MODEL)
WHEN MATCHED THEN UPDATE 
SET MASTER.MODEL_LONG = MODEL.MODEL_LONG;

Попробуйте использовать ключевое слово distinct во внутреннем запросе, потому что ORA-30926 Ошибка означает, что ваша исходная таблица содержит дубликаты ID / записей.Просто внесите ясность и посмотрите, поможет ли это.

select distinct * from MODEL;
0 голосов
/ 08 июня 2018

Если ваши таблицы имеют соответствующие уникальные ключи, вы можете использовать эту:

UPDATE 
   (SELECT 
        MASTER.MODEL_LONG as MASTER_MODEL_LONG, 
        MODEL.MODEL_LONG as MODEL_MODEL_LONG
    FROM MASTER JOIN MODEL ON MASTER.MODEL = MODEL.MODEL)
SET MASTER_MODEL_LONG = MODEL_MODEL_LONG;
0 голосов
/ 08 июня 2018

Oracle не поддерживает предложение FROM в UPDATE.Один метод использует коррелированные подзапросы:

UPDATE MASTER
    SET MASTER.MODEL_LONG = (SELECT MODEL.MODEL_LONG
                             FROM MODEL
                             WHERE MASTER.MODEL = MODEL.MODEL
                            );

Это обновит все строк.Те, у кого нет матчей, получают NULL.Чтобы предотвратить это:

UPDATE MASTER
    SET MASTER.MODEL_LONG = (SELECT MODEL.MODEL_LONG
                             FROM MODEL
                             WHERE MASTER.MODEL = MODEL.MODEL
                            )
    WHERE EXISTS (SELECT MODEL.MODEL_LONG
                  FROM MODEL
                  WHERE MASTER.MODEL = MODEL.MODEL
                 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...