sql >> Database >  >> RDS >> Mysql

MySQL 5.7:converteer eenvoudige JSON_ARRAY naar rijen

U kunt dit doen in MySQL 8.0 met JSON_TABLE() :

select r.res from mytable, 
 json_table(mytable.content, '$[*]' columns (res int path '$')) r 
where mytable.id = 1

Ik heb getest op MySQL 8.0.17, en dit is de output:

+------+
| res  |
+------+
|    3 |
|    4 |
+------+

Als u een versie gebruikt die ouder is dan MySQL 8.0, heeft u de volgende opties:

  • Zoek een onmogelijk complexe SQL-oplossing. Dit is bijna altijd de verkeerde manier om het probleem op te lossen, omdat je eindigt met code die te duur is om te onderhouden.
  • Haal de JSON-array op zoals deze is en explodeer deze in applicatiecode.
  • Normaliseer uw gegevens zodat u één waarde per rij heeft, in plaats van JSON-arrays te gebruiken.

Ik vind vaak vragen op Stack Overflow over het gebruik van JSON in MySQL die me ervan overtuigen dat deze functie MySQL heeft verpest. Ontwikkelaars blijven het ongepast gebruiken. Ze vinden het leuk dat het gemakkelijk is om in te voegen semi-gestructureerde gegevens, maar ze vinden dat het opvragen die gegevens veel te complex.




  1. Django/MySQL-python - Verbinding met oud (pre-4.1.1) authenticatieprotocol geweigerd (clientoptie 'secure_auth' ingeschakeld)

  2. Hoe id te krijgen na opgeslagen object in db in JPA?

  3. HAProxy-verbindingen versus MySQL-verbindingen - wat u moet weten

  4. Wijs hosttoegangsrechten opnieuw toe aan MySQL-gebruiker