5

我需要创建此查询中涉及的两个表,并且我不确定如何连接这两个表以进行更新。

我有一个 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 字段?

它本质上等于“字符串”|| ITEM.UPC 但我如何引用 CONSUMER_ITEMS.ITEM_CODE 以等于要更新的​​ ITEM_CODES 列表中的特定 ITEM_CODE。

4

4 回答 4

9

听起来像你想要的:

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 子句

于 2009-02-12T17:34:32.877 回答
0

对,看起来不错,但 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

这是与那些经常用于更新 CONSUMER_ITEMS 的代码相关联的 CODES 和 UPC 的不同列表。

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

似乎不起作用

于 2009-02-12T17:46:52.127 回答
0

i.ITEM_CODE、i.UPC 的列表是这样的:

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

第一列是项目代码,第二列是 UPC。这是在项目表上。

CONSUMER_ITEMS 表本质上也有一个 CONSUMER_ITEMS.ITEM_CODE。这就是 LINK,但它也有一个名为 CONSUMER_ITEMS.NEW_ITEM_CODE 的字段。我们想用上面列表中相应 ITEM_CODE 中的 UPC 填充 NEW_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 与字符串连接。

于 2009-02-12T18:10:31.103 回答
-3

/*+ BYPASS_UJVC */

如果您收到以下 oracle 错误 - ORA-01779:无法修改映射到非键保留表的列,请使用此提示

于 2010-02-17T19:34:39.890 回答