2014-11-05 20 views
1

我需要從一個表(表1)數據添加到另一個表(表2)凡在全名稱列中的數據在兩個表中匹配。下面的代碼幾乎可以做我想做的事情,只不過它刪除了table1標題列中的所有其他數據。SQL - 從一個表添加列數據到另一個,同時保留原有的數據

UPDATE table1 
SET title = (SELECT title 
       FROM table2 
      WHERE table2.fullname = table1.fullname) 

我的目標是更新表1的標題欄同時擁有它原本的數據以及從表2的標題欄,但不刪除之前運行的SQL查詢在表1的標題列中的數據的數據。

+0

如果有兩個或多個記錄在'table2'與同'fullname'? – ekad 2014-11-05 03:13:52

+0

您標記所有的數據庫管理系統,其DBMSü使用R,Oracle或SQL Server – radar 2014-11-05 03:15:03

+0

你的意思是你想連接這兩個領域? – 2014-11-05 03:16:34

回答

2

我假設你正在使用Oracle給你提供了語法。問題是,當你使用這種形式的UPDATE語句,你還需要一個WHERE EXISTS條款或類似的東西:

UPDATE table1 
    SET title = (SELECT title 
        FROM table2 
        WHERE table2.fullname = table1.fullname) 
WHERE EXISTS (SELECT 1 FROM table2 
        WHERE table2.fullname = table1.fullname) 

否則不匹配的冠軍將獲得歸零了!這樣做的原因是,子查詢的結果將是NULL時全名不存在table2

如果級聯是你要找的內容(如上@PM 77-1評論),那麼你會想要做類似如下:

UPDATE table1 
    SET title = title || ',' || (SELECT title 
            FROM table2 
            WHERE table2.fullname = table1.fullname) 
WHERE EXISTS (SELECT 1 FROM table2 
        WHERE table2.fullname = table1.fullname) 

希望這有助於。

+0

謝謝。你的第一個建議正是我所需要的。 – point71echo 2014-11-05 04:25:22

2

在Oracle中你可以使用一個合併:

MERGE INTO table1 t1 
USING (SELECT fullname, title 
     FROM table2) t2 
ON t1.fullname = t2.fullname 
WHEN MATCHED THEN 
    UPDATE SET t1.title = t2.title; 

這將只更新上fullname找到匹配的行。

相關問題