sql >> Databáze >  >> RDS >> Mysql

MySQL a JSON - transformace pole na řádky

Zde jsou tři způsoby, jak převést pole na řádky. Použití stejné předpokládané hodnoty JSON:

SET @j = '[10, 20, {"a": "bbb"}]';

Použití in-line tabulky čísel. Kompatibilní s MySQL a MariaDB:

WITH sequenceGenerator (sequenceNumber) AS (
    SELECT 0 AS sequenceNumber
    UNION ALL
    SELECT 1
    UNION ALL
    SELECT 2
)
SELECT
    JSON_EXTRACT(@j, CONCAT('$[', sequenceNumber, ']')) AS arrayValue
FROM
    sequenceGenerator;

Použití MySQL 8.0.4+ JSON_TABLE():

SELECT
    arrayValue
FROM
    JSON_TABLE(
        @j,
         '$[*]'
        COLUMNS(
            arrayValue JSON PATH '$')
    ) AS tt;

Použití MariaDB SEQUENCE Engine k odstranění in-line sekvenční tabulky:

SELECT
    JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
    seq_0_to_2;

Chcete-li, aby MariaDB byla obecnější, použijte pro délku pole maximum „nejlepšího odhadu“ a poté omezte sekvenci na délku JSON. Tento příklad předpokládá, že největší pole bude mít 1024 nebo méně prvků:

SELECT
    JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
    seq_0_to_1024 AS sequenceTable
WHERE
    sequenceTable.seq < JSON_LENGTH(@j);



  1. Možné návratové hodnoty pro mysql_affected_rows()

  2. Jak vytvořit cizí klíč, který je zároveň primárním klíčem v MySQL?

  3. Migrace databáze Oracle z AWS EC2 na AWS RDS, část 4

  4. Android – lepší přístup při načítání obrázků z SD KARTY