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!