I have written following MySQL
Json Array query. The Mysql version is 8.0.18-commercial
select r.network, s.server from table1 e inner join table2 s on e.objectId = s.envId inner join resources r on e.objectId = r.envId inner join tpgs g on e.accountId = g.objectId inner join msgTable a on a.id = (select max(a.id) from msgTable a where a.logId = s.AuditId) ORDER BY dateSubmitted DESC ;
The output has 2 columns network
and server
network server --- --- [ "Linux123" { "key" : "Key123", "name" : "RedHat 7" } ] [ "Linux234" { "key" : "Key234", "name" : "RedHat 8" } ]
I want to modify the JOIN
query and only fetch network.name
from the table:
networkName server --- --- RedHat 7 "Linux123" RedHat 8 "Linux234"
I have written the following JOIN but it is giving null
for the networkName
select r.network->>"$.name" as networkName, s.server from table1 e inner join table2 s on e.objectId = s.envId inner join resources r on e.objectId = r.envId inner join tpgs g on e.accountId = g.objectId inner join msgTable a on a.id = (select max(a.id) from msgTable a where a.logId = s.AuditId) ORDER BY dateSubmitted DESC ;
Advertisement
Answer
It seems like network
is an array that always contains a single object, while you are adressing it as an object.
If so, you just need to change this:
r.network->>"$.name"
To:
r.network->>"$[0].name"