Sql 使用两个表进行更新,连接
我需要创建的查询中涉及两个表,我不确定如何连接这两个表以进行更新 我有一个项目和消费者项目表。项目表中的每个项目都有一个不同的代码和一个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_代码,使其等于要更新的项目代码列表中的特定项目代码。听起来像是您想要: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
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_代码不是唯一的吗?我想一定是这样。第一场和第二场之间有性能差异吗?他们在功能上做同样的事情,哪一个更快?对不起,我一点都不懂!也许我们需要看一些样本数据?请参见上文以获得更好的解释。