我有一個sqlite3 DB與不同的表。 我在做什麼是UPDATE
表中的最後一個插入的行與來自另一個記錄的數據來自同一個表或另一個類似的表。SQLITE UPDATE字段IF NULL來自另一個表
我知道它的工作,但我想知道如果我的解決方案是正確的或缺少的東西,如果我可以寫在一個更緊湊和更迅速的方式。
此外,我的代碼是非常非常難以管理的,因爲如果將來表結構將改變我將必須重寫查詢來添加或刪除字段。
如果可以編寫一個sql查詢,該查詢從一個表中獲取一個完整記錄並更新同一個表的另一個記錄中的所有NULL
字段,那麼我很徘徊。
sprintf(global_sql, "UPDATE "\
"Table1 "\
"SET "\
"fiedl1 = case when fiedl1 is null then (SELECT fiedl1 FROM Table1 WHERE Table1_id = %d) else fiedl1 end, "\
"fiedl2 = case when fiedl2 is null then (SELECT fiedl2 FROM Table1 WHERE Table1_id = %d) else fiedl2 end, "\
"fiedl3 = case when fiedl3 is null then (SELECT fiedl3 FROM Table1 WHERE Table1_id = %d) else fiedl3 end "\
"WHERE "\
"Table1_id = (SELECT max(Table1_id) FROM Table1)", sourceRecord_idx, sourceRecord_idx, sourceRecord_idx);
正如你可以看到每個單場我一定要寫它的具體SET
情況下,而且每一個提交的值由選擇檢索。
我想/希望有一個更簡單和更可維護的方式來做到這一點。
不,沒有辦法做到這一點。這是一件好事,因爲這不是一個好主意。總會有例外,你作爲程序員必須意識到每個添加的字段並決定是否應用例外。 – Ben
@Ben我可以同意你的看法,但是有一種不同的方法可以避免單個SELECT從源記錄中檢索單個字段? – LPs