第一種方式:JSON_CONTAINS 函數 ; 執行相等形式的比較 注意:值的類型一定要相同,不然會報錯
文檔地址:https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-contains
select JSON_CONTAINS('{"tagId": 18, "tagName": "廣告", "tagType": "1", "valueType": "default"}', '18','$.tagId')
但是這種只能匹配單個值得,無法多值匹配
第二種方式: MEMBER OF 函數 ; 執行相等形式的比較 此方式無需在意類型的匹配
文檔地址: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#operator_member-of
SELECT 2 MEMBER OF(CONCAT('[',(select GROUP_CONCAT(n) FROM (SELECT 1 AS n union select 2) t),']'));
通過 MEMBER OF寫得話,可以匹配多值,相當於IN查詢
第三種方式:JSON表,這種方式可以適用於更復雜的場景,比如IN獲取其他查詢的方式; 大白話就是:聲明JSON的結構,將JSON轉換為一個臨時表
文檔地址:https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html#function_json-table
select * from JSON_TABLE('[ {"name":"小明","age":59} ]','$[*]' COLUMNS(name VARCHAR(200) PATH '$.name',age int PATH '$.age')) AS t