sql >> Database >  >> RDS >> Mysql

Hoe JSON-gegevens op te halen uit MySQL?

Aangezien veel mensen mij deze vraag persoonlijk hebben gesteld, dacht ik dit antwoord een tweede herziening te geven. Hier is een kern met de volledige SQL met SELECT, Migration en View Creation en een live sql-viool (beschikbaarheid niet gegarandeerd voor viool) .

Laten we zeggen dat je een tabel hebt (genaamd:TBL_JSON) zoals deze:

 ID   CITY        POPULATION_JSON_DATA
-----------------------------------------------------------------------
 1    LONDON      {"male" : 2000, "female" : 3000, "other" : 600}
 2    NEW YORK    {"male" : 4000, "female" : 5000, "other" : 500}

Om elk json-veld te selecteren, kunt u het volgende doen:

SELECT 
    ID, CITY,
    json_extract(POPULATION_JSON_DATA, '$.male') AS POPL_MALE,
    json_extract(POPULATION_JSON_DATA, '$.female') AS POPL_FEMALE,
    json_extract(POPULATION_JSON_DATA, '$.other') AS POPL_OTHER
FROM TBL_JSON;

welke resultaten:

ID  CITY      POPL_MALE  POPL_FEMALE   POPL_OTHER 
-----------------------------------------------------------------
1   LONDON    2000       3000          600
2   NEW YORK  4000       5000          500

Dit kan een dure operatie zijn om uit te voeren op basis van uw gegevensgrootte en json-complexiteit. Ik raad aan het te gebruiken voor

  1. Migratie van tabel naar gesplitste database (Zie bijlage 2-B in essentie)
  2. Maak in ieder geval een weergave (Zie bijlage 2-C in essentie)

Pas op voor:Mogelijk hebt u json beginnend met dubbele aanhalingstekens (stringen):

"{"male" : 2000, "female" : 3000, "other" : 600}"

Getest met Mysql 5.7 op Ubuntu en Mac OSX Sierra.



  1. Tabel wordt niet gemaakt sqlite android

  2. SQL-injectie die mysql_real_escape_string() omzeilt

  3. TABLESAMPLE retourneert een verkeerd aantal rijen?

  4. Waarom hebben we de GLOB-clausule in SQLite nodig?