在mysql中,我們可以使用IN語(yǔ)句對(duì)多個(gè)value進(jìn)行查詢。而當(dāng)我們需要對(duì)json數(shù)組進(jìn)行IN查詢時(shí)該怎么辦呢?下面就讓我們通過(guò)代碼實(shí)現(xiàn)來(lái)探討一下。
CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `class` json DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4; INSERT INTO `student` (`id`, `name`, `class`) VALUES (1, '小明', '[{"name": "數(shù)學(xué)", "score": 79}, {"name": "英語(yǔ)", "score": 85}, {"name": "物理", "score": 92}]'), (2, '小紅', '[{"name": "數(shù)學(xué)", "score": 89}, {"name": "英語(yǔ)", "score": 78}, {"name": "物理", "score": 95}]'), (3, '小黃', '[{"name": "數(shù)學(xué)", "score": 96}, {"name": "英語(yǔ)", "score": 87}, {"name": "物理", "score": 84}]');
首先我們創(chuàng)建一個(gè)學(xué)生表student,其中class字段為json數(shù)組。我們可以通過(guò)以下代碼來(lái)查詢其中分?jǐn)?shù)在90分以上的學(xué)生:
SELECT * FROM student WHERE JSON_CONTAINS(class, '{"score":90}', '$.name')=1;
這里我們使用了JSON_CONTAINS函數(shù),該函數(shù)用于判斷json數(shù)組中是否存在某個(gè)元素。第一個(gè)參數(shù)為需要查詢的字段,第二個(gè)參數(shù)為查詢條件,第三個(gè)參數(shù)為查詢路徑。在這里,我們查詢字段class中是否包含score為90的元素。注意這里的查詢條件和查詢路徑都需要使用json格式字符串。
如果我們需要查詢多個(gè)分?jǐn)?shù)的學(xué)生,可以通過(guò)IN語(yǔ)句實(shí)現(xiàn):
SELECT * FROM student WHERE JSON_CONTAINS(class, '{"score":90}', '$.name') OR JSON_CONTAINS(class, '{"score":95}', '$.name');
這里我們使用了OR語(yǔ)句將兩個(gè)查詢條件連接在一起。如果需要查詢更多的元素,可以繼續(xù)在后面添加查詢條件。
通過(guò)以上代碼,我們可以輕松實(shí)現(xiàn)對(duì)json數(shù)組的IN查詢。