Представьте себе таблицу, которая отслеживает кувшины бейсбола, как...
+------------+--------------------+-------+
| id | name | secondary_pitch |
+------------+--------------------+-------+
| 13 | Chris Sale | ['Curveball','Slider'] |
| 14 | Justin Verlander | ['Fastball','Changeup'] |
| 15 | CC Sabathia | ['Fastball','Curveball'] |
| 16 | Sonny Grey | ['Slider'] |
| 17 | Aldoris Chapman | [] |
+------------+--------------------+-------+
Обратите внимание, что столбец secondary_pitch имеет значение JSON. Поэтому, если у кувшина, такого как Chapman, нет вторичного тона, он не будет возвращать нуль, вместо этого он возвращает пустую строку JSON ('[]').
Как тогда я могу получить количество кувшинов, у которых нет вторичной подачи?
Я не могу...
select count(*) from pitchers where secondary_pitch is null
Это проверит, где secondary_pitch (null) или '' (пустая строка)
SELECT count(*) from pitchers WHERE secondary_pitch IS NULL OR secondary_pitch = '';
вы также можете использовать это.
SELECT count(*) from pitchers WHERE secondary_pitch LIKE '%[]%'
[]
) элемент массива json не равен NULL
или ' '
поэтому это не сработает ..
Я думаю, вы можете просто использовать json_length()
:
where json_length(secondary_pitch) = 0
['Curveball','Slider']
) является недействительным JSON ..
json_length
Вы можете использовать JSON_EXTRACT
чтобы получить первое значение из своего столбца и проверить, не null
where JSON_EXTRACT('secondary_pitch', '$[0]') is not null
Вы можете использовать функцию ниже
SELECT * FROM TABLE_NAME WHERE
JSON_SEARCH(secondary_pitchers, 'all', '')
IS NOT NULL;
['Curveball','Slider']
) является недействительным JSON ..
['Curveball','Slider']
являются недопустимыми JSON, поэтому ни одна из родных JSON MySQL (например,JSON_LENGTH
,JSON_SEARCH
илиJSON_EXTRACT
видели несколько ответов вместе с ним) не будут работать ...["Curveball","Slider"]
является допустимым JSON, тогда функции JSON MySQL должны работать очень хорошо.