我有一個包含“所有者”列的表,其中包含 json 資料,如下所示:
[
{
"first":"bob",
"last":"boblast"
},
{
"first":"mary",
"last": "marylast"
}
]
我想撰寫一個查詢,該查詢將為包含這樣的資料的每一行回傳,該列的所有名字都用逗號連接。
IE
id owners
----------------------------
1 bob,mary
2 frank,tom
還沒有在 mysql 8.0 上。
uj5u.com熱心網友回復:
您可以將值作為 JSON 陣列獲取:
SELECT JSON_EXTRACT(owners, '$[*].first') AS owners ...
但這以 JSON 陣列格式回傳:
-----------------
| owners |
-----------------
| ["bob", "mary"] |
-----------------
JSON_UNQUOTE() 不會去掉括號和雙引號。您必須使用 REPLACE(),正如我在最近的回答中所展示的:
MYSQL JSON 搜索回傳方括號中的結果
如果資料不支持您需要的查詢方式,您應該考慮不以 JSON 格式存盤資料。
uj5u.com熱心網友回復:
這是另一種選擇,獲取一個包含最大 json 陣列長度的運行數字的輔助表,并按單個索引提取值,然后是group_concat值,如下所示:
SELECT g.id, GROUP_CONCAT(g.name)
FROM (
SELECT a.id, JSON_UNQUOTE(JSON_EXTRACT(a.owners, CONCAT('$[', n.idx, '].first'))) name
FROM running_numbers n
JOIN mytable a
) g
GROUP BY g.id
https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=d7453c9edf89f79ca4ab2f63578b320c
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/347001.html
標籤:mysql mysql-json
下一篇:劃分新創建的列
