Мне тяжело со всеми этими сложностями. Ради этого вопроса у меня есть таблица с двумя столбцами. Один столбец с именами содержит такие данные:
["Marc", "Teddy", "Katie"]
Второй столбец содержит данные JSON следующим образом:
{"males":[{"name":"Marc","age":"32"},{"name":"Teddy","age":"8"}],
"females":[{"name":"Katie","age":"28"}]}
Есть ли способ в SQL сравнить строки в массиве в первом столбце с полем имени в данных JSON во втором столбце, чтобы приписать поле возраста в JSON строкам имени в первом столбце?
Я понимаю, что это сложная/запутанная ситуация, но любая помощь с извлечением данных из массива в столбце или извлечением данных из JSON в столбце была бы очень полезна для меня, пока я работаю над этим.
Кажется, вам нужна функция 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'))