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
およびにその行番号を使用してと、テーブル:JOIN
servers
objectIds
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