テーブル定義
sql
1CREATE TABLE IF NOT EXISTS `items` ( 2 `id` int(11) NOT NULL AUTO_INCREMENT, 3 `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, 4 PRIMARY KEY (`id`) 5) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 6 7INSERT INTO `items` (`id`, `name`) VALUES 8 (1, 'item001'), 9 (2, 'item002'); 10 11CREATE TABLE IF NOT EXISTS `weapons` ( 12 `id` int(11) NOT NULL AUTO_INCREMENT, 13 `item` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, 14 PRIMARY KEY (`id`) 15) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; 16 17INSERT INTO `weapons` (`id`, `item`) VALUES 18 (1, '{"item_ids":[1,2]}');
やりたい事
以下のSQLと同じ意味の事をJSONデータを利用して行いたいです。
求めている結果もこのSQLの実行結果と同じです。
select * from items i where i.id in (1,2);
聞きたい事
以下のSQLを実行すると結果が0件になります。
sql
1select * from items i where i.id in ( 2 select JSON_EXTRACT(item, '$.item_ids') from weapons w where w.id=1 3);
おそらく、IN句にJSONの文字列データが渡されている為0件になっています。
weaponsテーブルのitemカラムのデータが複数行データとして取得できていればIN句で利用できると思いましたがやり方が分かりませんでした。
どのようなSQLを書けばよいでしょうか。
環境
10.2.12-MariaDB
回答1件
あなたの回答
tips
プレビュー