UPDATE使用两个表,Concatenation

时间:2009-02-12 17:25:22

标签: sql oracle sql-update

我需要创建这个查询的两个表,我不确定如何连接这两个表以便更新。

我有一个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_CODES列表中的特定ITEM_CODE。

4 个答案:

答案 0 :(得分: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子句

答案 1 :(得分: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)); 

似乎不起作用

答案 2 :(得分:0)

i.ITEM_CODE,i.UPC的列表如下:

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

第一栏是ITEM CODES,第二栏是UPC。这是在ITEMS表上。

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与STRING连接。

答案 3 :(得分:-3)

/ * + BYPASS_UJVC * /

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