使用Oracle将两列组合成一个来自联结表的列

时间:2015-04-17 13:56:39

标签: oracle oracle11g

我接管了一个Oracle数据库,但几乎所有内容都在一个表中。这是一场彻头彻尾的噩梦。所以我创建了一些连接表来尝试修剪细节表。但是我难以理解如何将2个字段转换为1个字段。例如下面。

以下是详细信息表的示例。目前帐户和任务ID分为2个单独的列。

我已经加入了acc_task_id。我需要从联结表填充acc_Task_id。帐号和task_id匹配的位置。一旦完成。 我将从详细信息表中删除帐户和任务ID。

  • oracle 11g
  • 350万行

enter image description here

enter image description here

这将如何结束。

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用WHERE EXISTS

UPDATE detail_tbl dt
   SET dt.acc_task_id = ( SELECT at.acc_task_id FROM acc_task_jun_tbl at
                           WHERE NVL(at.acc_id, -1) = NVL(dt.acc_id, -1)
                             AND at.task_id = dt.task_id )
 WHERE EXISTS ( SELECT 1 FROM FROM acc_task_jun_tbl at
                 WHERE NVL(at.acc_id, -1) = NVL(dt.acc_id, -1)
                   AND at.task_id = dt.task_id );

请注意,我使用NVL(acc_id, -1)(假设-1不是该列的有效值),因为NULL = NULL无法正常工作。