![](/img/trans.png)
[英]how to extract json array as table from mysql text column when number of json objects in array is unknown?
[英]How to extract and flatten and array that is inside of JSON objects in MySQL 8?
給定一些 json 文件,如下所示:
{
"_id":"00006073",
"subscribersIds":[
170968,
225647
]
}
-----------------------------------
{
"_id":"00006072",
"subscribersIds":[
170968
]
}
--------------------------------
{
"_id":"00006074,
"subscribersIds":[
228195,
225647
]
}
你知道我怎樣才能得到一個subscribersIds的列表,而不用重復嗎? 結果應該是這樣的170968, 225647, 228195
,因為我需要將此查詢的結果用作另一個查詢的條件。
對於 Couchebase,有“UNNEST”命令可以執行此操作,但是我在 MySQL 8 中找不到正確的方法,因為SELECT DISTINCT doc ->> '$.subscribersIds[*]' FROM customers
will return [170968,225647],[170968],[228195,225647]
提前致謝!
mysql> select * from mytable;
+----------+------------------+
| _id | subscriberIds |
+----------+------------------+
| 00006072 | [170968] |
| 00006073 | [170968, 225647] |
| 00006074 | [228195, 225647] |
+----------+------------------+
mysql> select j.subscriberId from mytable,
json_table(mytable.subscriberIds, '$[*]' columns (subscriberId int path '$')) j;
+--------------+
| subscriberId |
+--------------+
| 170968 |
| 170968 |
| 225647 |
| 228195 |
| 225647 |
+--------------+
mysql> select distinct j.subscriberId from mytable,
json_table(mytable.subscriberIds, '$[*]' columns (subscriberId int path '$')) j;
+--------------+
| subscriberId |
+--------------+
| 170968 |
| 225647 |
| 228195 |
+--------------+
這是一個相當復雜的查詢,每次您想要獲取一組不同的subscriberId 時都要編寫。
如果您根本不使用 JSON 而是以標准化方式存儲 id,每行一個在第二個表中,這會容易得多。
mysql> create table mySubscribers (_id char(8), subscriberId int, primary key (_id, subscriberId));
mysql> insert into mySubscribers (_id, subscriberId) select _id, subscriberId from mytable, json_table(subscriberIds, '$[*]' columns (subscriberId int path '$')) j;
Records: 5 Duplicates: 0 Warnings: 0
mysql> select * from mySubscribers;
+----------+--------------+
| _id | subscriberId |
+----------+--------------+
| 00006072 | 170968 |
| 00006073 | 170968 |
| 00006073 | 225647 |
| 00006074 | 225647 |
| 00006074 | 228195 |
+----------+--------------+
mysql> select distinct subscriberId from mySubscribers;
+--------------+
| subscriberId |
+--------------+
| 170968 |
| 225647 |
| 228195 |
+--------------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.