使用另一个表的另一列的数据更新列 - 11Gr2

时间:2014-02-05 15:27:36

标签: sql oracle oracle11g

我有两张桌子:

  1. SPC_DEVICE
  2. SPC_CALIBRATE
  3. SPC_DEVICE包含一个名为CALIBRATION_DATE的列 SPC_CALIBRATE包含一个名为CUSER5的列。

    我想使用CUSER5中的数据复制和替换(覆盖)CALIBRATION_DATE中的数据。

    我正在使用Oracle 11gR2

    非常感谢您提供的任何帮助。

    修改

    感谢您的快速回复!我只是获得了一些我们想要完成的信息。我使用Crystal Reports提取了一份报告,它看起来像这样:

    http://imageshack.com/a/img37/2456/1a8w.png

    我的要求自我的首发后发生了一点变化:

    如果来自CALIBRATION_DATE表的CUSER5与来自ID的{​​{1}}匹配,则查询需要将数据从SPC_DEVICE列复制到SPC_DEVICE_ID列{1}}表(类似于第2行到最后一行,尽管这是手动输入的)。如果没有匹配,则跳过并不要复制。

    Crystal Reports还会显示SPC_CALIBRATESPC_DEVICE.ID之间存在链接。

    再次,非常感谢您的帮助。

    谢谢。

2 个答案:

答案 0 :(得分:0)

您的问题听起来像spc_calibrate只有一行。您没有在两个表之间指定任何条件,因此您可以使用如下查询:

update spc_device
    set calibration_date = (select cusers from spc_calibrate where rownum = 1);

更典型的是,有一种方法可以将行相互关联,例如:

update spc_device
    set calibration_date = (select cusers
                            from spc_calibrate
                            where cusers.devicenum = spc_device.devicenum
                           );

答案 1 :(得分:0)

您可以像这样进行合并:

MERGE INTO spc_calibrate
  USING spc_device
    ON (spc_calibrate.spc_device_id = spc_device.id)
  WHEN MATCHED THEN
    UPDATE SET spc_calibrate.cuser5=spc_device.calibration_date

但是你需要表之间的链接才能做到这一点。 (spc_calibrate.id = spc_device.id)

此处还有一些其他合并示例:http://www.oracle-base.com/articles/10g/merge-enhancements-10g.php

(实际上,如果你的桌子只有一排,那么请看看Gordon Linoff的答案......我假设的目标更为复杂。)