Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用两个表进行更新,连接_Sql_Oracle_Sql Update - Fatal编程技术网

Sql 使用两个表进行更新,连接

Sql 使用两个表进行更新,连接,sql,oracle,sql-update,Sql,Oracle,Sql Update,我需要创建的查询中涉及两个表,我不确定如何连接这两个表以进行更新 我有一个项目和消费者项目表。项目表中的每个项目都有一个不同的代码和一个UPC代码。我需要将带有ITEM.UPC_代码的字符串连接到CONSUMER_ITEMS.NEW_ITEM_代码,其中CONSUMER_ITEMS.ITEM_代码=(ITEM.ITEM_代码的特定列表) 我将如何更新CONSUMER\u ITEMS.NEW\u ITEMS\u CODE字段 它本质上等于'string'| | ITEM.UPC,但我如何引用CON

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

我有一个项目和消费者项目表。项目表中的每个项目都有一个不同的代码和一个UPC代码。我需要将带有ITEM.UPC_代码的字符串连接到CONSUMER_ITEMS.NEW_ITEM_代码,其中CONSUMER_ITEMS.ITEM_代码=(ITEM.ITEM_代码的特定列表)

我将如何更新CONSUMER\u ITEMS.NEW\u ITEMS\u CODE字段

它本质上等于'string'| | ITEM.UPC,但我如何引用CONSUMER|ITEMS.ITEM_代码,使其等于要更新的项目代码列表中的特定项目代码。

听起来像是您想要:

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_项具有主键,则应该可以:

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

对,看起来不错,但是item.item\u code=ci.item\u代码不起作用,因为:

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
这是与这些代码相关的代码和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)); 

似乎不起作用

i.ITEM_代码列表,i.UPC如下:

014940  070182132137
018266  929245021085
018268  729245021108
018418  029245022815
018419  129245022822
018420  229245022839
018421  529245022846
018422  929245022853
第一列是项目代码,第二列是UPCs。这在项目表上

CONSUMER\u ITEMS表实际上也有CONSUMER\u ITEMS.ITEM\u代码。这是链接,但它还有一个名为CONSUMER\u ITEMS.NEW\u ITEM\u CODE的字段。我们想用上面列表中相应项目代码中的UPC填充新项目代码,并用上面的“字符串”| | 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
这将生成上述UPC列表中的项目代码。我需要更新符合上述代码的消费者商品。具体地说,我需要更新他们新的\u ITEM\u代码字段,这些字段为空,相应的UPC用字符串连接。

/*+BYPASS\u UJVC*/


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

基本上,我的项。项代码=(‘值集’)将引用消费者项中的项代码。您的意思是像我现在添加的那样吗?奇怪的是,它赢了;不让我修改一个视图,第一条语句会在子查询errorsSo ITEM_代码中产生多个值,那么ITEMS表中的ITEM_代码不是唯一的吗?我想一定是这样。第一场和第二场之间有性能差异吗?他们在功能上做同样的事情,哪一个更快?对不起,我一点都不懂!也许我们需要看一些样本数据?请参见上文以获得更好的解释。