Запрос на совпадение ключей массива json - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть поле json в mysql, которое называется column_info.Вот пример значения:

[{"id": ["132605", "132750", "132772", "132773", "133065", "133150", "133185", "133188", "133271", "133298"]}, 
 {"number": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}, 
 {"id": ["1", "1", "1", "1", "1", "1", "1", "1", "1", "1"]}
]

Можно ли выполнить запрос, который выполняет следующие действия:

keys = ['id', 'number', 'id']
SELECT * FROM `column_info` WHERE JSON(??) = keys

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Попробуйте:

SELECT `column_info`
FROM
  `table`,
  (SELECT @`keys` := '["id", "number", "id"]') `init`
WHERE (
  SELECT
    JSON_ARRAYAGG(
      JSON_UNQUOTE(
        JSON_EXTRACT(
          JSON_KEYS(`der`.`keys`),
          '$[0]'
        )
      )  
    )
  FROM
    JSON_TABLE(
      `column_info`,
      '$[*]'
      COLUMNS(
        `keys` JSON PATH '$'
      )  
    ) `der`
) = CAST(@`keys` AS JSON);

См. db-fiddle .

0 голосов
/ 27 декабря 2018

Какая версия MySQL у вас работает?

Если это v8, вы можете попробовать JSON_CONTAINS ()

https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...