Я изо всех сил пытаюсь условно извлечь значения из вложенной строки JSON в таблице Mysql.
{"users": [{"userId": "10000001", "userToken": "11000000000001", "userTokenValidity": 1}, {"userId": "10000002", "userToken": "12000000000001", "userTokenValidity": 1}, {"userId": "10000003", "userToken": "13000000000001", "userTokenValidity": 0}]}
Я хочу выбрать userToken, но только если userTokenValidity равно 1. Таким образом, в этом примере должны быть выбраны только «11000000000001» и «120000000000001».
Это извлечет весь массив... как мне отфильтровать результат?
SELECT t.my_column->>"$.users" FROM my_table t;
@BillKarwin Я использую версию 8.0.29.
SELECT CAST(value AS CHAR) output
FROM test
CROSS JOIN JSON_TABLE(test.data, '$.users[*]' COLUMNS (value JSON PATH '$')) jsontable
WHERE value->>'$.userTokenValidity' = 1
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=4876ec22a9df4f6d2e75a476a02a2615
Вам нужно использовать JSON_TABLE(), что означает, что вам нужно использовать MySQL 8.0. Что возвращает
SELECT VERSION();
?