Oracle SQL Update一个表列,其中包含另一个表的值

时间:2016-11-30 12:47:19

标签: sql oracle

我有一个表D_DATE,其中有YYYYMMDD列,其值为V_TILL(我对日期格式不感兴趣)。我碰巧还有另一个表B,其中有一个列名D_DATE。现在,我想用表A中的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) 列的值更新表B的V_TILL列值,该值恰好也有重复项。意思是,内部查询可以从我形成查询的位置返回多个记录来更新表。

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

  

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

BK_CODE

PS:BK_CODEBR_CODEimport React from 'react'; import ReactDOM from 'react-dom'; import './App.css'; class Toogle extends React.Component { constructor(props) { super(props); //step 1 this.handleClick = this.handleClick.bind(this); this.startTimer=this.startTimer.bind(this) } handleClick() { console.log('Button is clicked'); // clearTimeout(timeoutTimer); startTimer() { var timeoutTimer = setTimeout(function() { window.location.href = '#/security/logout'; }.bind(this), 1000); } } render() { return (<div onMouseMove={this.handleClick}>Move the cursor over me</div>); } } ReactDOM.render( <Toogle />, document.getElementById('root') );

的连接

请帮助我,因为我陷入了这个泥潭!任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

如果子查询返回许多您想要使用的值?

如果有的话可以使用rownum&lt; = 1; 如果您知道只有一个值使用distinct

 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)

 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)

以上是解决方法。要做到正确,你必须分析为什么你得到多个价值。也许需要更复杂的逻辑来选择正确的值。

答案 1 :(得分:0)

我使用了这个命令:

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)))

正如许多人之前提到的那样,我错过了一个额外的条件并使其正常工作,否则上述技术的效果非常好。

感谢大家!