[英]Oracle SQL Update one table column with the value of another table
我有一个表A
,其中有一个D_DATE
列,其值的格式为YYYYMMDD
(我不介意日期格式)。 我也碰巧有另一个表B,其中有一个列名V_TILL
。 现在,我想的值更新表B的V_TILL列值D_DATE
在表列的A
恰好有重复也。 意思是,内部查询可以从我形成查询以更新表的位置返回多个记录。
我目前已编写此查询,但会引发错误:
ORA-01427:单行子查询返回多个行
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_CODE
是BK_CODE
和BR_CODE
并BR_CODE
由于我陷入了泥潭,请帮助我! 任何帮助,将不胜感激。
如果子查询返回许多值,您要使用哪个值?
如果有的话,您可以使用rownum <= 1; 如果您知道只有一个值,请使用
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)
以上是解决方法。 要正确地做到这一点,您必须分析为什么获得不止一个价值。 也许需要更复杂的逻辑来选择正确的值。
我可以使用以下命令:
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)))
正如许多人早先提到的那样,我错过了一个额外的条件并使其正常工作,否则上述技术可以很好地工作。
谢谢大家!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.