2010-05-15 16 views
0

因此,我有一個長度爲10,000行的數據表。表格中的幾列簡單描述了其中一列的信息,即只有一列具有內容,而其餘列描述內容的位置(其對於書籍而言)。目前,10,000行內容列中只有6,000個內容被填充。 6-10,000行的內容列簡單地說空。當我嘗試從MySQL數據庫中的另一個表更新表中的行時發生奇怪的數據交換錯誤

我有另一個表中的數據庫的行6,000-10,000的內容,與正確的對應的主鍵,這將(似乎)可以很容易地更新10,000行表。

我一直在努力更新查詢,如下所示:

UPDATE table(10,000) 
SET content_column = (SELECT content FROM table(6,000-10,000) WHERE table(10,000).id = table(6-10,000.id) 

哪種作品,唯一的問題是,它拉在第二個表就好了數據,但它取代現有的內容列爲空。所以第1-6,000行的內容欄變爲空白,第6-10,000行的內容欄有正確的值......我很奇怪,我仍然認爲。

有誰知道在哪裏我錯了什麼想法?如果你能給我看一個更好的SQL查詢,我將不勝感激!由於

回答

0

的原因是,你有沒有當正在更新子句,以便所有行。以下查詢將僅更新6K-10K表中存在的行,但仍會覆蓋匹配值。

Update table(10,000) 
Set content_column = (
         Select content 
         From table(6,000-10,000) 
         Where table(10,000).id = table(6-10,000.id) 
         ) 
Where Exists (
       Select 1 
       From table(6,000-10,000) 
       Where table(10,000).id = table(6-10,000.id) 
       ) 

另一種方式,如果你根本不希望覆蓋現有值是使用合併:

Update table(10,000) 
Set content_column = Coalesce(table(10,000).content_column 
          , (
           Select content 
           From table(6,000-10,000) 
           Where table(10,000).id = table(6-10,000.id) 
           )) 
相關問題