Oracle SQL |单行子查询更新返回多行?

时间:2015-07-02 12:58:57

标签: sql oracle sql-update

这个问题似乎已经被问到了很多,但是我找不到任何处理更新的问题以及处理其他事情的问题并没有帮助。我觉得我错过了一些显而易见的东西,但我不能把手指放在上面。

我有以下查询来更新我的表,其中包含来自另一个表的ID以启用与电子表格的匹配:

update TABLE3 set ITM_CD2 = 
(select pi.ITM_CD2
   from schema1.PI_TABLE pi,
        TABLE3 tb3
  where pi.OTHER_ITM_CD = tb3.OTHER_ITM_CD)

我实际上无法完成更新,因为我不断需要一个单行子查询"的问题。

编辑:我应该提到pi表来自一个单独的模式。

编辑2:了解更多详情;这是我试图获得的一个例子:

表3目前有这些数据,例如:

NAME ----- PRODUCT ----- ITM_CD1 ----- ITM_CD2
X          Y             11            NULL
A          B             12            NULL
C          Y             11            NULL

我试图附加此项目表中的数据,以便我可以获得第二个itm_cd,这样我就可以将它与具有ITM_CD2但不是ITM_CD1的表进行比较。表3中的NULL将替换为匹配的ITM_CD2。

我试图从中获取ITM_CD2的表格如下所示:

PRODUCT ----- ITM_CD1 ----- ITM_CD2
A             10            90
Y             11            98
B             12            87

3 个答案:

答案 0 :(得分:3)

也许你想在子查询中使用主要的TABLE3:

update TABLE3 set ITM_CD2 = 
(select pi.ITM_CD2
   from PI_TABLE pi
  where pi.OTHER_ITM_CD = TABLE3.OTHER_ITM_CD)

答案 1 :(得分:1)

我喜欢在这种情况下使用merge而不是update。它使您正在阅读的表与您正在编写的表之间的连接更加清晰:

MERGE INTO table3 t3
USING      pi_table pi
ON         (pi.other_itm_cd = t3.other_itm_cd)
WHEN MATCHED THEN
   UPDATE SET t3.itm_cd2 = pi.itm_cd2 

答案 2 :(得分:0)

尝试此查询

 UPDATE ( SELECT t1.Item_CD2,pi.ITM_CD2
          FROM table3 t1
          join pi_table pi on pi.OTHER_ITM_CD = t1.OTHER_ITM_CD
         )
 SET t1.Item_CD2=pi.ITM_CD2