Oi, Fernando, tudo bem?
Desde já, peço desculpas pela demora em te responder.
Existem algumas mudanças que precisamos fazer para o SELECT ficar certinho, vmos analisá-las mais de perto?
Para realizar a consulta, precisamos indicar, já no início, as colunas Nome_Departamento, Nome_Projeto CPF_FUNCIONARIO e Horas. Como Nome_Departamento e Nome_Projeto são colunas que não serão utilizadas para a junção futura, seus conteúdos já serão extraídos diretamente no SELECT, o qual ficará assim:
SELECT JSON_EXTRACT(jsonvalue, "$.Nome_Departamento") AS Nome_Departamento,
JSON_EXTRACT(jsonvalue, "$.Projeto[0].Nome_Projeto") AS Nome_Projeto,
t2.Cpf_Funcionario,
t2.Horas
FROM tb_object_departamento_projeto_trabalha_em
Acima, podemos perceber que já foi realizada a extração das informações com a função JSON_EXTRACT! Além disso, para um melhor entendimento acerca das duas primeiras colunas, adicionamos um apelido a cada uma dela por meio da cláusula AS.
Depois disso, já podemos iniciar o CROSS JOIN! As únicas informações necessárias para alcançar o objetivo da atividade são Horas_Trabalhadas, Cpf_Funcionario e Horas. Ao fim, o código ficará desta forma:
CROSS JOIN JSON_TABLE(
JSON_EXTRACT(jsonvalue, "$.Projeto[0].Horas_Trabalhadas"),
"$[*]"
COLUMNS (
CPF_FUNCIONARIO VARCHAR(11) PATH "$.Cpf_Funcionario",
Horas TIME PATH "$.Horas"
)
) t2;
Para utilizar as horas trabalhadas no CROSS JOIN, obtemos os valores a partir da chave $.Projeto[0].Horas_Trabalhadas. Desse modo, poderemos relacionar tais dados com Cpf_Funcionario e Horas.
Além disso, vale ressaltar que houve uma mudança em "$[*]": para obter todas as informações necessárias a partir das colunas definidas, usamos o símbolo de cifrão com abertura de colchetes, asterisco e fechamento de colchetes.
Depois dessas mudanças, Fernando, o SELECT ficará assim:
SELECT JSON_EXTRACT(jsonvalue, "$.Nome_Departamento") AS Nome_Departamento,
JSON_EXTRACT(jsonvalue, "$.Projeto[0].Nome_Projeto") AS Nome_Projeto,
t2.CPF_FUNCIONARIO,
t2.Horas
FROM tb_object_departamento_projeto_trabalha_em
CROSS JOIN JSON_TABLE(
JSON_EXTRACT(jsonvalue, "$.Projeto[0].Horas_Trabalhadas"),
"$[*]"
COLUMNS (
CPF_FUNCIONARIO VARCHAR(11) PATH "$.Cpf_Funcionario",
Horas TIME PATH "$.Horas"
)
) t2;
Continue sempre dedicado nos estudos e evoluindo! Em caso de dúvidas sobre o passo a passo que construímos ou sobre outros assuntos, conte comigo.
Abraço!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!