2015-04-17 35 views
0

我接管了Oracle數據庫,但幾乎所有內容都位於一個表中。這是一個完整的噩夢。所以我創建了幾個聯結表來嘗試修剪細節表。然而,我難倒如何將2場轉換爲一場。例如下面。使用Oracle將2個coloumns合併爲交匯表中的一個

下面是詳細信息表的示例。目前帳戶和任務ID分爲兩列。

我已包含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

你可以使用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不起作用。