#mysql #sql #arrays #json #where-clause
#mysql #sql #массивы #json #where-предложение
Вопрос:
Мне трудно справиться со всеми его сложностями. Для ответа на этот вопрос у меня есть таблица с двумя столбцами. Один столбец с именем names содержит такие данные:
["Marc", "Teddy", "Katie"]
Второй столбец содержит данные JSON, подобные этому:
{"males":[{"name":"Marc","age":"32"},{"name":"Teddy","age":"8"}],
"females":[{"name":"Katie","age":"28"}]}
Есть ли способ в SQL сравнить строки в массиве в первом столбце с полем name в данных JSON во втором столбце, чтобы приписать поле age в JSON строкам name в первом столбце?
Я понимаю, что это сложная / запутанная ситуация, но любая помощь в извлечении данных из массива внутри столбца или извлечении данных из JSON в столбце была бы очень полезна для меня, пока я работаю над этим.
Ответ №1:
Кажется, что вам нужно JSON_CONTAINS()
вместе с JSON_EXTRACT()
функцией, чтобы сравнить эти столбцы, такие как
WITH t(col1,col2) AS
(
SELECT '["Marc", "Teddy", "Katie"]',
'{"males":[{"name":"Marc","age":"32"},{"name":"Teddy","age":"8"}], "females":[{"name":"Katie","age":"28"}]}'
)
SELECT JSON_EXTRACT(col2,'$.males[*].name') AS males,
JSON_EXTRACT(col2,'$.females[*].name') AS females
FROM t
WHERE JSON_CONTAINS(col1,JSON_EXTRACT(col2,'$.males[*].name'))
OR JSON_CONTAINS(col1,JSON_EXTRACT(col2,'$.females[*].name'))