2011-12-05 15 views
1

我想在我的sqlite數據庫中的某一組行上運行一個簡單的更新查詢。它可以工作,但它會將所有其他行中的空值刪除。下面是該查詢:我想更新表中的某些行,但其他人得到NULL'd出

update table1 set col5 =(select col5 from table2 where table2.id = table1.id)

我知道這是超級容易,但我無法弄清楚到底是怎麼回事。我不能只更新某些行,而只保留其他行嗎?

回答

1

您使用的是相同的列要更新到涉及的兩個表。您應該使用主鍵或輔助鍵來關聯這兩個表。

看到這個非常類似的問題及其答案:SQL update from one Table to another based on a ID match

+0

在你原來的問題中,那是。但鏈接仍然相關。 –

+0

@oofgwen將此添加到查詢中:'where exists(select * from table2 where table2.id = table1.id)'以避免在非匹配行上設置NULL值。 –

+0

最後一部分是它!謝謝! – Lizza

2

試試這個:

update table1 inner join table2 on table1.id = table2.id 
set table1.col5 = table2.col5 

編輯:

對不起,沒有意識到這是sqlite的。 sqlite不支持update子句中的連接。 我最好的猜測是,你可以做到以下幾點:

update table1 set col5 = (select col5 from table2 where table2.id = table1.id) 
where id IN (SELECT id FROM table2) 
+0

有沒有人真正嘗試或思索呢?它的語義是:set a.x = b.x其中a.x = b.x.它最多會導致更新的時間戳。 –

+0

所以我嘗試了查詢,並且由於內部關鍵字,我的簡單sqlite瀏覽器拋出了一個錯誤......我知道我之前完成過這種類型的事情,但我不記得如何去做。 – Lizza

+0

我意識到它什麼也沒做,我想他只是用列名的佔位符... –

相關問題