有沒有辦法將 json 陣列合并到 mysql 的一個單元格中。我有一個無法修改的表結構,如下所示:
| 剩下 | 正確的 |
|---|---|
| [1、2、3、4] | [“a”,“ab”] |
select group_concat(Distinct left SEPARATOR ',')
from temptbl where json_contains(right ,'"ba"','$') ;
回傳
[11, 12, 13, 4],[411, 12, 13, 4]
在一個單元格中,我想將這些值合并到一個陣列中。任何建議表示贊賞。
uj5u.com熱心網友回復:
它不漂亮,但它作業得很好,但你可以在動態 sql 中使用 JSON_MeRGE 來實作
CREATE TABLE temptbl ( `left` JSON, `right` JSON ); INSERT INTO temptbl (`left`, `right`) VALUES ('[1, 2, 3, 4]', '["a", "ba"]'), ('[10, 20, 30, 40]', '["a", "ba"]');
select group_concat(Distinct CONCAT("'",`left`,"'") SEPARATOR ',') INTO @sql from temptbl where json_contains(`right` ,'"ba"','$') ;
SELECT CONCAT("SELECT JSON_MERGE( ",@sql,");") INTO @sql; PREPARE stmt1 FROM @sql; EXECUTE stmt1; DEALLOCATE PREPARE stmt1;
| JSON_MERGE('[1, 2, 3, 4]','[10, 20, 30, 40]') | | :------------------------------------------------------------ | | [1, 2, 3, 4, 10, 20, 30, 40] |
db<>在這里擺弄
uj5u.com熱心網友回復:
MySQL 的內置JSON 函式數量有限。您需要 JSON_ARRAY_APPEND() 之類的東西,但它以 JSON_ARRAYAGG() 之類的聚合方式附加 JSON 陣列。我認為 MySQL 中沒有任何 JSON 函式可以執行您所描述的操作。
我建議更簡單的解決方案是不要嘗試在 SQL 中將所有陣列附加在一起。只需將所有單獨的陣列獲取到您的客戶端應用程式,然后撰寫代碼來回圈結果集并將 JSON 字串附加到代碼中的陣列中。
另一種解決方案是根本不在 JSON 中存盤陣列,而是每行存盤一個值,并且陣列將成為行集。然后 GROUP_CONCAT() 會更簡單地作業。但是你說你不能改變你的資料庫的結構。
很遺憾,因為以 JSON 格式存盤資料,然后嘗試使用 SQL 運算式來搜索或操作 JSON,就好像它是關系資料一樣,這通常更復雜。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/443565.html
