Pregunta

Tengo dos tablas implicadas en esta consulta que necesito para crear, y no estoy muy seguro de cómo unirse a estas dos tablas con el fin de actualizar.

I tiene un artículo y una mesa CONSUMER_ITEMS. La tabla ITEM tiene un código distinto para cada elemento y un código UPC. Necesito para concatenar una cadena con el ITEM.UPC_CODE a CONSUMER_ITEMS.NEW_ITEM_CODE donde CONSUMER_ITEMS.ITEM_CODE = (lista específica de ITEM.ITEM_CODES)

¿Cómo hago para actualizar el campo CONSUMER_ITEMS.NEW_ITEM_CODE?

sería esencialmente igual a 'cadena' || ITEM.UPC pero ¿Cómo me refiero a la CONSUMER_ITEMS.ITEM_CODE ser igual a la ITEM_CODE específico en la lista de ITEM_CODES ser actualizados.

¿Fue útil?

Solución

Parece que desee:

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

Por otra parte, suponiendo que hay una relación de clave externa entre las tablas y que consumer_items tiene una clave principal, esto debería funcionar:

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: Añadido cláusulas WHERE

Otros consejos

La lista de i.ITEM_CODE, i.UPC es la siguiente:

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

La primera columna es códigos de artículos, segunda columna es los códigos UPC. Esto está en la tabla de artículos.

La tabla CONSUMER_ITEMS tiene esencialmente una CONSUMER_ITEMS.ITEM_CODE también. Eso está el enlace, pero también tiene un campo llamado CONSUMER_ITEMS.NEW_ITEM_CODE. Queremos llenar el NEW_ITEM_CODE con la UPC desde el ITEM_CODE correspondiente en la lista anterior con una concatenación de 'cadena' || UPC CODE desde arriba.

Como generamos esa lista es la siguiente:

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

Esto genera la lista ITEM_CODE, UPC anteriormente. Necesito actualizar los CONSUMER_ITEMS que coinciden con los códigos anteriormente. Específicamente, es necesario que actualice sus campos NEW_ITEM_CODE, que son null, con la UPC correspondiente concatenado con una cadena.

Derecho, que se ve muy bien, pero el item.item_code = ci.item_code no funciona porque:

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

Esta es la lista distinta de códigos y la UPC asociados con esos códigos que tanto ser utilizados para actualizar los 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)); 

no parecen funcionar

/ * + * BYPASS_UJVC /

utilizar esta receta si usted está recibiendo el siguiente oráculo de errores ORA-01779: no se puede modificar una columna que se asigna a una tabla no conservado tecla

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top