sql >> Database teknologi >  >> RDS >> Mysql

MySQL JSON fusionerer to json-objekters primærnøgle i JSON-dokument

Her er en sindssygt indviklet måde at gøre dette på i MySQL ved at bruge JSON_TABLE for at konvertere opdateringen og de originale JSON-værdier til kolonner ved at flette kolonnerne ved hjælp af en (simuleret) FULD JOIN og derefter genskabe output-JSON-værdien ved hjælp af JSON_OBJECT og JSON_ARRAYAGG ; endelig ved at bruge det til at opdatere den originale tabel:

WITH upd AS ( SELECT * FROM JSON_TABLE('[{"substanceId":182, "text":"substance_name_182_new"}, {"substanceId":184, "text":"substance_name_184"}]' , '$[*]' KOLONNER ( stofId INT PATH '$.substanceId', txt VARCHAR (100) PATH '$.text') ) jt CROSS JOIN (SELECT DISTINCT id FROM test) t),cur AS ( SELECT id, substansId, txt FRA test JOIN JSON_TABLE(test.j, '$[*]' KOLUMNER (substansId INT PATH '$.substanceId', txt VARCHAR (100) PATH '$.text') ) jt),allv AS ( SELECT COALESCE (upd.id, cur.id) AS id, COALESCE(upd.substanceId, cur.substanceId) AS stofId, COALESCE(upd.txt, cur.txt) AS txt FRA upd LEFT JOIN cur ON cur.substanceId =upd.substanceId UNION ALL SELECT COALESCE(upd.id, cur.id) AS id, COALESCE(upd.substanceId, cur.substanceId) AS stofId, COALESCE(upd.txt, cur.txt) AS t xt FRA upd HØJRE JOIN cur ON cur.substanceId =upd.substanceId),obj AS ( SELECT DISTINCT id, JSON_OBJECT('substanceId', stofId, 'text', txt) AS o FROM allv),arr AS ( SELECT id, JSON_ARRAYAGG (o) SOM FRA obj GROUP BY id)OPDATERING testJOIN arr ON test.id =arr.idSET test.j =arr.a;SELECT JSON_PRETTY(j)FROM test 

Output:

[ { "text":"substance_name_183", "substanceId":183 }, { "text":"substance_name_184", "substanceId":184 }, { "text":"substance_name_182_new", "substanceId" ":182 }]

Demo på dbfiddle

Bemærk dette forudsætter, at du bruger et unikt id værdi for at skelne rækkerne i din tabel. Hvis du bruger noget andet, skal du bytte det ud i hvor id bruges i ovenstående forespørgsel.




  1. MySQL-forbindelse mistet:systemfejl:110

  2. Skriv til JSON-fil ved hjælp af CodeIgniter

  3. Mistet forbindelsen til MySQL-serveren ved 'læsning af initial kommunikationspakke', systemfejl:0

  4. Slet rækker med Laravel query builder og LEFT JOIN