Função JSON_OBJECTAGG() do MySQL

Resumo : neste tutorial, você aprenderá como usar a JSON_OBJECTAGG()função MySQL para agregar pares de valores-chave de colunas em um objeto JSON.

Introdução à função MySQL JSON_OBJECTAGG()

A JSON_OBJECTAGG()função agrega pares de valores-chave de colunas em um objeto JSON. Aqui está a sintaxe da JSON_OBJECTAGG()função:

JSON_OBJECTAGG(key, value)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A JSON_OBJECTAGG()função recebe dois nomes de colunas como argumentos: o primeiro sendo usado como chave e o segundo como valor.

A JSON_OBJECTAGG()função retorna um objeto JSON contendo pares de valores-chave. Retorna NULLse o resultado não tiver linhas ou em caso de erro.

O erro ocorre quando qualquer nome de chave é NULLou o número de argumentos não é igual a 2.

Na prática, você costuma usar a JSON_OBJECTAGG()função com a cláusula GROUP BY para agregar dados em objetos JSON para cada grupo produzido pela cláusula GROUP BY.

Exemplo de função JSON_OBJECTAGG() do MySQL

No exemplo a seguir, primeiro criaremos uma tabela para armazenar os campos personalizados de uma entidade no banco de dados e, em seguida, usaremos a função JSON_OBJECTAGG() para agregar pares de valores-chave em um objeto JSON.

Primeiro, crie uma tabela chamada properties:

CREATE TABLE properties (
    id INT,
    attribute VARCHAR(255) NOT NULL,
    value VARCHAR(255)
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A tabela de propriedades possui três colunas:

  • id: Esta é a coluna que armazena os idregistros de outra tabela, por exemplo, products.
  • attribute: esta coluna armazena o nome do atributo.
  • value: esta coluna armazena o valor do atributo.

Segundo, insira alguns dados de amostra na propertiestabela:

INSERT INTO properties(id, attribute, value) 
VALUES
    (1, 'color', 'red'),
    (1, 'size', 'medium'),
    (1, 'shape', 'circle'),
    (2, 'color', 'blue'),
    (2, 'size', 'large'),
    (3, 'color', 'green'),
    (3, 'shape', 'square');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, consulte os dados da propertiestabela:

SELECT * FROM properties;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+------+-----------+--------+
| id   | attribute | value  |
+------+-----------+--------+
|    1 | color     | red    |
|    1 | size      | medium |
|    1 | shape     | circle |
|    2 | color     | blue   |
|    2 | size      | large  |
|    3 | color     | green  |
|    3 | shape     | square |
+------+-----------+--------+
7 rows in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Por fim, agregue os dados pelos valores da idcoluna usando a JSON_OBJECTAGG()função:

SELECT 
  id, 
  JSON_OBJECTAGG(attribute, value) AS attribute_value 
FROM 
  properties 
GROUP BY 
  id;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+------+-------------------------------------------------------+
| id   | attribute_value                                       |
+------+-------------------------------------------------------+
|    1 | {"size": "medium", "color": "red", "shape": "circle"} |
|    2 | {"size": "large", "color": "blue"}                    |
|    3 | {"color": "green", "shape": "square"}                 |
+------+-------------------------------------------------------+
3 rows in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Resumo

  • Use a função MySQL JSON_OBJECTAGG()para agregar pares de valores-chave de colunas em objetos JSON.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *