sql >> Databasteknik >  >> RDS >> Mysql

MySQL 5.7:konvertera enkel JSON_ARRAY till rader

Du kan göra detta i MySQL 8.0 med JSON_TABLE() :

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

Jag testade på MySQL 8.0.17, och det här är resultatet:

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

Om du använder en äldre version än MySQL 8.0 har du dessa alternativ:

  • Hitta någon omöjligt komplex SQL-lösning. Detta är nästan alltid fel sätt att lösa problemet, eftersom du får kod som är för dyr att underhålla.
  • Hämta JSON-arrayen som den är och explodera den i programkoden.
  • Normalisera dina data så att du har ett värde per rad istället för att använda JSON-matriser.

Jag hittar ofta frågor om Stack Overflow om att använda JSON i MySQL som övertygar mig om att den här funktionen har förstört MySQL. Utvecklare fortsätter att använda det på ett olämpligt sätt. De gillar att det gör det enkelt att sätta in semi-strukturerad data, men de upptäcker att det gör fråga att data är alldeles för komplexa.




  1. Django försöker använda fel databasanvändare

  2. Varför är min MySQLi-anslutning så långsam?

  3. Hur man ställer in databastidszon för en AWS RDS-instans

  4. NHibernate / MySQL-strängsammansättning