首页 > 解决方案 > 如何查询json中不包含任何给定关键字的数据

问题描述

问题:如何查询标志中不包含任何给定关键字的数据。

表格看起来像这样。

CREATE TABLE `mangas` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `flag` json NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

然后表格中的数据看起来像这样

INSERT INTO `mangas` (`id`,`flag`) VALUES
(1,'[\"a\", \"b\", \"c\", \"d\"]');
(2,'[\"b\", \"c\", \"d\", \"f\"]');
(3,'[\"a\", \"b\", \"1\", \"2\"]');
(4,'[\"a\", \"c\", \"1\", \"3\"]');
(5,'[\"a\", \"9\", \"10\", \"2\"]');
COMMIT;

当我使用 JSON_ 进行查询时JSON_CONTAINS(mangas.flag, '[\"a\",\"b\"]', '$'),它可以找到所有包含 a 和 b 的数据

但是我想用a或b查询并排除所有数据。我应该怎么办?

也许我没有清楚地表达我的需求

这是一个正常的不在查询中

select * from tabel1 where a not in('a','b','c')

如何在 JSON 字段的查询中实现这一点?

标签: mysqldatabase

解决方案


您可以使用 JSON_REMOVE() 从 JSON 中排除数据。看看这个例子,

https://database.guide/json_remove-remove-data-from-a-json-document-in-mysql/


推荐阅读