mysql的jsonTable使用及說明
JSON_TABLE 是 MySQL 8.0 中一個新的 JSON 函數。它也是一個表函數,返回值不是標量值而是結果集。
JSON_TABLE 將 JSON 文檔(部分或全部)轉換為關系表,以便您可以像使用普通表一樣使用它。
JSON_TABLE 函數從一個指定的 JSON 文檔中提取數據并返回一個具有指定列的關系表??梢韵衿胀ǖ谋硪粯邮褂?JSON_TABLE () 返回的表。
json-table官方文檔地址:
https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html#function_json-table
以下是jsontable的語法
JSON_TABLE(
expr,
path COLUMNS (column_list)
) [AS] alias
column_list:
column[, column][, ...]
column:
name FOR ORDINALITY
| name type PATH string path [on_empty] [on_error]
| name type EXISTS PATH string path
| NESTED [PATH] path COLUMNS (column_list)
on_empty:
{NULL | DEFAULT json_string | ERROR} ON EMPTY
on_error:
{NULL | DEFAULT json_string | ERROR} ON ERROR
使用示例
假設我們有一個表包含ID和名稱:
CREATE TABLE t1
(
id varchar(32),
name JSON
);
添加如下數據:
INSERT INTO t1
VALUES (uuid_short(), json_array('John'));
INSERT INTO t1
VALUES (uuid_short(), json_array('toma','Smith'));
INSERT INTO t1
VALUES (uuid_short(), json_array('aa','bb','cc','tt'));
現在,我們想要從 t1 表中查詢所有名稱和id,進行查詢(在 MySQL 中,JSON_TABLE 函數的 JSON 路徑表達式可以使用 $ 符號來指定。
$[*] 表示提取 JSON 文檔中的所有屬性):
SELECT value,id
from t1
,
JSON_TABLE(name, '$[*]' COLUMNS (
value VARCHAR(255) PATH '$'
)) AS jt
數據將如下:

NESTED PATH 嵌套路徑
NESTED PATH為其所屬的子句中的每個匹配項生成一組記錄??梢越鉀Q復雜的json嵌套數據轉為行。
添加一條數據:
INSERT INTO t1
VALUES ('1', json_array(json_object('a',1,'b',json_array(11,111)),
json_object('a',2, 'b',json_array(22,222)),
json_object('a',3)));
使用 NESTED PATH:
SELECT jt.*
FROM t1,
JSON_TABLE(
name,
'$[*]' COLUMNS (
a INT PATH '$.a',
NESTED PATH '$.b[*]' COLUMNS (b INT PATH '$')
)
) AS jt
WHERE id = '1';

我們發(fā)現每次jsontable后依然會對應所在的ID,比如:

上面需求的a,b列的ID就是1而不是其他ID。這其實是遵從了sql標準。
橫向派生表
根據SQL標準,MySQL總是將帶有表函數(如JSON_TABLE())的連接視為使用LATERAL無論MySQL發(fā)布版本如何,都是如此,這就是為什么即使在8.0.14之前的MySQL版本中也可以加入此函數的原因。
在MySQL 8.0.14及更高版本中,LATERAL 關鍵字是隱式的,不允許在 JSON_TABLE() 之前使用。這也是根據SQL標準。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
mysql 5.7.13 安裝配置方法圖文教程(win10)
這篇文章主要為大家分享了mysql 5.7.13 安裝配置方法圖文教程,感興趣的朋友可以參考一下2016-06-06
mysql 8.0 找不到my.ini配置文件以及報sql_mode=only_full_group
MySQL5.7.5及以上版本啟用ONLY_FULL_GROUP_BYSQL模式可能導致的問題,本文就來介紹一下找不到my.ini配置文件的解決方法,感興趣的可以了解一下2024-08-08

