ACTUALIZACIÓN utilizando dos tablas, la concatenación
-
23-08-2019 - |
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.
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