首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Oracle SQL将一个表列更新为另一个表的值

Oracle SQL将一个表列更新为另一个表的值
EN

Stack Overflow用户
提问于 2016-11-30 20:47:19
回答 2查看 694关注 0票数 1

我有一个表A,其中有一个值为YYYYMMDD的列D_DATE (我不关心日期格式)。我还碰巧有另一个表B,其中有一个列名为V_TILL。现在,我希望用表A中的D_DATE列的值来更新表B的V_TILL列值,该表恰好也有重复项。这意味着,内部查询可以返回多条记录,我可以从其中形成一个查询来更新表。

我目前已经编写了这个查询,但它抛出了错误:

ORA-01427:单行子查询返回多行

代码语言:javascript
复制
UPDATE TAB_A t1
 SET (V_TILL) = (SELECT TO_DATE(t2.D_DATE,'YYYYMMDD')
                       FROM B t2
                      WHERE t1.BR_CODE = t2.BR_CODE
                      AND t1.BK_CODE = t2.BK_CODE||t2.BR_CODE)
WHERE EXISTS (
  SELECT 1
    FROM TAB_B t2
   WHERE t1.BR_CODE = t2.BR_CODE
   AND t1.BK_CODE = t2.BK_CODE||t2.BR_CODE)

PS:BK_CODEBK_CODEBR_CODE的组合

请帮助我,因为我被困在这个泥潭中!任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2016-11-30 20:52:46

如果子查询返回许多值,您希望使用哪一个值?

如果有,可以使用rownum <=1;如果知道只有一个值,则使用distinct

代码语言:javascript
复制
 SET (V_TILL) = (SELECT TO_DATE(t2.D_DATE,'YYYYMMDD')
                       FROM B t2
                      WHERE t1.BR_CODE = t2.BR_CODE
                      AND t1.BK_CODE = t2.BK_CODE||t2.BR_CODE AND ROWNUM <=1)

代码语言:javascript
复制
 SET (V_TILL) = (SELECT DISTINCT TO_DATE(t2.D_DATE,'YYYYMMDD')
                       FROM B t2
                      WHERE t1.BR_CODE = t2.BR_CODE
                      AND t1.BK_CODE = t2.BK_CODE||t2.BR_CODE)

以上是变通方法。要做到这一点,你必须分析为什么你会得到一个以上的值。也许需要更复杂的逻辑来选择正确的值。

票数 2
EN

Stack Overflow用户

发布于 2016-12-01 15:13:59

我使用以下命令使其正常工作:

代码语言:javascript
复制
MERGE INTO TAB_A A
USING TAB_B B
ON (A.BK_CODE = B.BK_CODE || B.BR_CODE 
AND A.BR_CODE = B.BR_CODE AND B.BR_DISP_TYPE <> '0' 
AND ((B.BK_CODE, B.BR_SUFFIX) IN (SELECT BK_CODE,
                                        MIN(BR_SUFFIX)
                                        FROM TAB_B
                                        GROUP BY BK_CODE)))

正如许多人之前提到的,我忽略了一个额外的条件并使其正常工作,否则上面提到的技术工作得很好。

感谢所有人!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40888775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档