ОБНОВЛЕНИЕ с использованием двух таблиц, конкатенация - PullRequest
5 голосов
/ 12 февраля 2009

У меня есть две таблицы, связанные с этим запросом, который мне нужно создать, и я не совсем уверен, как объединить эти две таблицы для обновления.

У меня есть таблица ITEM и CONSUMER_ITEMS. Таблица ITEM имеет отдельный код для каждого элемента и код UPC. Мне нужно объединить строку с ITEM.UPC_CODE в CONSUMER_ITEMS.NEW_ITEM_CODE, где CONSUMER_ITEMS.ITEM_CODE = (Специальный список ITEM.ITEM_CODES)

Как мне обновить поле CONSUMER_ITEMS.NEW_ITEM_CODE?

По сути, это будет равно 'string' || ITEM.UPC, но как мне сослаться на CONSUMER_ITEMS.ITEM_CODE, чтобы он совпадал с конкретным ITEM_CODE в списке обновляемых ITEM_CODES.

Ответы [ 4 ]

9 голосов
/ 12 февраля 2009

Звучит так, как вы хотите:

UPDATE consumer_items ci
SET    new_item_code = (SELECT 'string' || item.upc_code
                        FROM   item
                        WHERE  item.item_code = ci.item_code
                       )
WHERE  ci.item_code IN ('a','b','c');

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

UPDATE (SELECT ci.id, ci.new_item_code, item.upc_code
        FROM   consumer_items ci
               JOIN item ON item.item_code = ci.item_code
        WHERE  ci.item_code IN ('a','b','c')
       ) v
SET v.new_item_code = 'string' || v.upc_code

РЕДАКТИРОВАТЬ: добавлены предложения WHERE

0 голосов
/ 17 февраля 2010

/ * + BYPASS_UJVC * /

используйте эту подсказку, если вы получаете следующую ошибку оракула - ORA-01779: невозможно изменить столбец, который сопоставляется с таблицей без сохранения ключа

0 голосов
/ 12 февраля 2009

Список i.ITEM_CODE, i.UPC таков:

014940  070182132137
018266  929245021085
018268  729245021108
018418  029245022815
018419  129245022822
018420  229245022839
018421  529245022846
018422  929245022853

Первый столбец - КОДЫ ПУНКТОВ, Второй столбец - UPC. Это в таблице ITEMS.

Таблица CONSUMER_ITEMS по существу также имеет CONSUMER_ITEMS.ITEM_CODE. Это ссылка, но она также имеет поле CONSUMER_ITEMS.NEW_ITEM_CODE. Мы хотим заполнить NEW_ITEM_CODE UPC из соответствующего ITEM_CODE в приведенном выше списке конкатенацией 'string' || UPC-код сверху.

Как мы генерируем этот список:

SELECT distinct i.code, i.upc
FROM item i, consumer_items ci 
WHERE i.ccode = '123434' 
AND i.scode = 'ACTIVE' 
AND i.upc IS NOT NULL 
AND ci.item_code = i.code 
AND i.code IN 
(SELECT DISTINCT tr.item_code 
 FROM tr_table tr 
 WHERE tr.category = 'RRE') 
AND ci.NEW_ITEM_CODE IS NULL

Это генерирует ITEM_CODE, список UPC выше. Мне нужно обновить CONSUMER_ITEMS, который соответствует этим кодам выше. В частности, мне нужно обновить их поля NEW_ITEM_CODE, которые являются нулевыми, с соответствующим UPC, соединенным со STRING.

0 голосов
/ 12 февраля 2009

Да, это выглядит великолепно, но item.item_code = ci.item_code не работает, потому что:

SELECT distinct i.code, i.upc
FROM item i, consumer_items ci 
WHERE i.ccode = '123132' 
AND i.scode = 'ACTIVE' 
AND i.upc IS NOT NULL 
AND ci.item_code = i.code 
AND i.code IN 
    (SELECT DISTINCT tr.item_code 
     FROM t_r tr
     WHERE tr.category = 'RRE') 
AND ci.NEW_ITEM_CODE IS NULL

Это отдельный список кодов и кодов UPC, связанных с этими кодами, которые будут использоваться для обновления CONSUMER_ITEMS.

new_item_code = (SELECT 'string' || item.upc_code FROM item WHERE item.item_code = (SELECT distinct i.code, i.upc
FROM item i, consumer_items ci 
WHERE i.ccode = '123132' 
AND i.scode = 'ACTIVE' 
AND i.upc IS NOT NULL 
AND ci.item_code = i.code 
AND i.code IN 
    (SELECT DISTINCT tr.item_code 
     FROM t_r tr
     WHERE tr.category = 'RRE') 
AND ci.NEW_ITEM_CODE IS NULL)); 

не похоже на работу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...