JSONドキュメントから別の値を抽出するためにJSON配列を使用するには?

meallhour:

私が使用してい8.0.18-commercialて、次の書かれたMySQLフォームにクエリをcross join with JSON documents

内のエントリ数があることに注意してくださいservers[]内のエントリの数と同じであるobjectIds[]に一つのエントリがあるように意図されたservers[]エントリに対応しますobjectIds[]

SELECT t1.networkInfo->>"$.*" AS network, 
t1.objectIds,
j.server
FROM table1 t1
CROSS JOIN JSON_TABLE(t1.servers, 
                      "$[*]" COLUMNS (
                        server VARCHAR(20) PATH '$'
                        )
                      ) j
WHERE t1.id = 56

出力

network                             server                  objectIds
["abc.com", "Linux123", "RHEL"]     Server123       ["objectId123", "objectId1231", "objectId1232"]
["abc.com", "Linux123", "RHEL"]     Server1231      ["objectId123", "objectId1231", "objectId1232"]
["abc.com", "Linux123", "RHEL"]     Server1232      ["objectId123", "objectId1231", "objectId1232"]

私は、別のクエリで参加追加したい出力が見えるように以下のように:

予想される出力

network                             server           objectIds
["abc.com", "Linux123", "RHEL"]     Server123        objectId123
["abc.com", "Linux123", "RHEL"]     Server1231       objectId1231
["abc.com", "Linux123", "RHEL"]     Server1232       objectId1232
ニック:

あなたは開梱によって、あなたが望む結果を得ることができるobjectIdsと同じように列をserversそれぞれに行番号列を追加し、列のJSON_TABLE使用FOR ORDINALITYおよびにその行番号を使用して、テーブル:JOINserversobjectIds

SELECT t1.networkInfo->>"$.*" AS network, s.server, o.objectId
FROM table1 t1
CROSS JOIN JSON_TABLE(t1.servers, 
                      "$[*]" COLUMNS (
                        rownum FOR ORDINALITY,
                        server VARCHAR(20) PATH '$'
                        )
                      ) s
JOIN JSON_TABLE(t1.objectIds, 
                "$[*]" COLUMNS (
                  rownum FOR ORDINALITY,
                  objectId VARCHAR(20) PATH '$'
                  )
                ) o ON o.rownum = s.rownum
WHERE t1.id = 56

出力:

network                             server      objectId
["abc.com", "Linux123", "RHEL"]     Server123   objectId123
["abc.com", "Linux123", "RHEL"]     Server1231  objectId1231
["abc.com", "Linux123", "RHEL"]     Server1232  objectId1232

dbfiddleのデモ

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=402796&siteId=1