2017-07-13 35 views
2

我試圖在髒MySQL數據庫中使用knex.js進行遷移。 所以有一列中有三種不同類型的數據的JSON。 我已經進行了一次遷移,其中爲這些不同類型的數據創建了三個不同的列。Knex.js有條件地將數據從一列遷移到其他列

我現在想要做的,是有條件地從柱與JSON移動數據到三種不同的列,以便: if type == A: move to new_col_A else if type == B: move to new_col_B else: move to new_col_C 所以最終與JSON這一欄應該是空的,三個新列應用這個JSON列中的數據填充。

回答

1

像這樣的東西應該工作(https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#operator_json-inline-path):

update `MyTable` set `new_col_A` = `old_col` where `old_col`->>'$.type' = 'A'; 
update `MyTable` set `new_col_B` = `old_col` where `old_col`->>'$.type' = 'B'; 
update `MyTable` set `new_col_C` = `old_col` where `old_col`->>'$.type' not in ('A', 'B'); 

-- now check that data was migrated correctly to new columns before setting old column to null 
update `MyTable` set `old_col` = NULL; 

我沒有嘗試運行的代碼,因此它可能有一些誤差,但基本原則應該工作(我一直只使用JSON與postgresql)。

有了knex,你需要使用原始查詢才能正常工作,因爲它對json操作沒有任何特別的支持。

+0

謝謝,我應用了你的答案,它解決了。較新版本的MySql支持JSON。我確實需要一個原始查詢。 – warreee

相關問題