Прежде всего, я не уверен, что мой заголовок правильно объясняет этот вопрос, но я думаю, что мой код будет.
Вместо этого:
SELECT * FROM mytable WHERE JSON_EXTRACT('cars','$."65"') = 'Toyota' OR JSON_EXTRACT('cars ','$."66"') = 'Toyota' OR JSON_EXTRACT('cars ','$."67"') = 'Toyota'
Я хочу сделать это:
SELECT * FROM mytable WHERE JSON_EXTRACT('cars',any of these 65,66,67) = 'Toyota'
Это можно сделать?
Согласно документации, вы можете передать любое количество путей в качестве аргументов 2 в функцию JSON_EXTRACT
. Таким образом, следующее должно работать:
SELECT *
FROM yourTable
WHERE JSON_UNQUOTE(JSON_EXTRACT('cars', '$."65"', '$."66"', '$."67"')) LIKE '%"Toyota"%';
Обратите внимание, что WHERE
будет фактически возвращать строковые значения в форме ["some_value"]
, поэтому я сравниваю это. Кто-то, у кого больше опыта работы с MySQL JSON API, возможно, лучше, чем то, что я написал выше. Но это, по крайней мере, частично отвечает на ваш вопрос; да, вы можете извлекать несколько путей в одном вызове JSON_EXTRACT
.
JSON_EXTRACT(json_doc, path[, path] ...)
источник dev.mysql.com/doc/refman/8.0/en/… .. Похоже, можно включить несколько путей ..