2009-02-12 23 views
5

Mam dwie tabele zaangażowane w to kwerendy, które muszę utworzyć, i nie jestem dokładnie pewien, jak połączyć te dwie tabele w celu aktualizacji.AKTUALIZACJA przy użyciu dwóch tabel, Konkatenacja

Mam tabelę ITEM i CONSUMER_ITEMS. Tabela ITEM ma odrębny kod dla każdej pozycji i kodu UPC. Muszę złączyć ciąg z ITEM.UPC_CODE do CONSUMER_ITEMS.NEW_ITEM_CODE gdzie CONSUMER_ITEMS.ITEM_CODE = (szczegółowy wykaz ITEM.ITEM_CODES)

Jak bym go o aktualizację CONSUMER_ITEMS.NEW_ITEM_CODE dziedzinie?

Zasadniczo będzie to równe "stringowi" || ITEM.UPC, ale jak mogę odnieść się do CONSUMER_ITEMS.ITEM_CODE, aby być równym konkretnej pozycji ITEM_CODE na liście ITEM_CODES do zaktualizowania.

Odpowiedz

9

Brzmi jak chcesz:

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'); 

Alternatywnie, zakładając, że istnieje relacji klucza obcego między tabelami i że consumer_items ma klucz podstawowy, to powinno działać:

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 

EDIT: Dodano WHERE klauzule

+0

Zasadniczo, moja pozycja .item_code = ("SET OF VALUES"), który odwoływałby się do item_codes w CONSUMER_ITEMS – jlrolin

+0

Czy masz na myśli to, co dodałem powyżej? –

+0

Co dziwne, wygrało; t pozwoliło mi zmodyfikować widok, a pierwsza instrukcja powoduje wiele wartości w błędach podkwerendy. – jlrolin

0

Dobrze, wygląda świetnie, ale item.item_code = ci.item_code nie działa, ponieważ:

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 

To jest odrębna lista KODÓW i UPC powiązanych z tymi kodami, które są używane do aktualizacji 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)); 

nie wydają się działać

+0

Przepraszam, ale nic z tego nie rozumiem! Być może potrzebujemy zobaczyć kilka przykładowych danych? –

+0

patrz wyżej dla lepszego wyjaśnienia. – jlrolin

0

Lista i.ITEM_CODE, i.UPC to:

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

Pierwsza kolumna jest KODY element, druga kolumna jest minimalnej wadze i rozmiarze. Znajduje się on w tabeli ITEMS.

Tabela CONSUMER_ITEMS zawiera również CONSUMER_ITEMS.ITEM_CODE. To jest LINK, ale ma też pole o nazwie CONSUMER_ITEMS.NEW_ITEM_CODE. Chcemy wypełnić NEW_ITEM_CODE z UPC z odpowiedniego ITEM_CODE na powyższej liście z konkatencją "string" || KOD UPC OD POWYŻEJ.

Jak wygenerować ten wykaz jest:

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 

To generuje ITEM_CODE, listy UPC powyżej. Muszę zaktualizować CONSUMER_ITEMS, które pasują do powyższych kodów. W szczególności muszę zaktualizować pola NEW_ITEM_CODE, które są zerowe, z odpowiednim UPC połączonym ze STRING.

-3

/* + BYPASS_UJVC */

użycie tego wskazówka jeśli otrzymujesz następujące oracle ERROR- ORA-01779: nie można zmodyfikować kolumny który mapuje do tabeli klucza zachowane non

Powiązane problemy