Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Sugestão] Minhas resposta

Olá. Tudo bem?

Segue abaixo minha resposta:

-- Criação da tabela
CREATE TABLE tb_object_departamento_trabalha_em (
    JSONVALUE JSON
);

-- Inserção de dados
INSERT INTO tb_object_departamento_trabalha_em(JSONVALUE) VALUES
('{
  "Numero_Departamento": "5",
  "Data_Inicio_Gerente": "1988-05-22",
  "Nome_Departamento": "Pesquisa",
  "Cpf_Gerente": "33344555587",
  "Projeto": [
    {
      "Numero_Projeto": "2",
      "Nome_Projeto": "Produto Y",
      "Local_Projeto": "Itu",
      "Horas_Trabalhadas": [
        {
          "Cpf_Funcionario": "111222333",
          "Horas": 30
        },
        {
          "Cpf_Funcionario": "222333222",
          "Horas": 24
        },
        {
          "Cpf_Funcionario": "4443334444",
          "Horas": 30
        }
      ]
    },
    {
      "Numero_Projeto": "3",
      "Nome_Projeto": "Produto Z",
      "Local_Projeto": "São Paulo",
      "Horas_Trabalhadas": [
        {
          "Cpf_Funcionario": "111222333",
          "Horas": 25
        },
        {
          "Cpf_Funcionario": "5555444343",
          "Horas": 12
        },
        {
          "Cpf_Funcionario": "4443334444",
          "Horas": 48
        }
      ]
    }
  ]
}
'),
('{
  "Numero_Departamento": "5",
  "Data_Inicio_Gerente": "1988-05-22",
  "Nome_Departamento": "Comercial",
  "Cpf_Gerente": "33344555587",
  "Projeto": [
    {
      "Numero_Projeto": "2",
      "Nome_Projeto": "Produto Y",
      "Local_Projeto": "Itu",
      "Horas_Trabalhadas": [
        {
          "Cpf_Funcionario": "111222333",
          "Horas": 30
        },
        {
          "Cpf_Funcionario": "222333222",
          "Horas": 24
        },
        {
          "Cpf_Funcionario": "4443334444",
          "Horas": 30
        }
      ]
    },
    {
      "Numero_Projeto": "3",
      "Nome_Projeto": "Produto Z",
      "Local_Projeto": "São Paulo",
      "Horas_Trabalhadas": [
        {
          "Cpf_Funcionario": "111222333",
          "Horas": 25
        },
        {
          "Cpf_Funcionario": "5555444343",
          "Horas": 12
        },
        {
          "Cpf_Funcionario": "4443334444",
          "Horas": 48
        }
      ]
    }
  ]
}
');


/* Select para obtemos o nome do departamento, o nome do projeto,
o CPF do funcionário e as horas trabalhadas para o
primeiro projeto do departamento
*/
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_trabalha_em
CROSS JOIN JSON_TABLE(
    JSON_EXTRACT(JSONVALUE, "$.Projeto[0].Horas_Trabalhadas"),
    "$[*]"
    COLUMNS (
        CPF_FUNCIONARIO VARCHAR(11) PATH "$.Cpf_Funcionario",
        Horas INT PATH "$.Horas"
    )
) t2;


-- utilize esse comando para limpar a tabela se for necessário
TRUNCATE tb_object_departamento_trabalha_em; 

2 respostas

Ola!

Valeu por compartilhar :D

solução!

Olá, Roberto! Como vai?

Seu código está correto e bem estruturado! Parabéns! Obrigada pelos adendos a mais que você adicionou à resposta, pois ela ficou bem completa.

Se quiser compartilhar outra solução aqui conosco, fique à vontade.

Abraços!