Mariadb mysql中带数组值的Where条件

Mariadb mysql中带数组值的Where条件,mariadb,Mariadb,我有一张这样的桌子: 身份证件 价值观 用户id 1. [8,7,6] 5. 有关列数据类型的信息,特别是值,非常重要。由于该列混合存储数字和非数字字符,我们可以假设它可能存储在VARCHAR或TEXT数据类型中。但由于数据格式看起来像JSON数组,因此列数据类型也可能是JSON。现在,这两种数据类型都有一个非常不同的查询结构 首先,让我们讨论一些问题: 当单元格值包含数字以外的字符时,它将被视为字符串。因此,使用平原。。如果value=[8,7,6]没有用引号括起来,您将得到错误代码:1064

我有一张这样的桌子:

身份证件 价值观 用户id 1. [8,7,6] 5.
有关列数据类型的信息,特别是值,非常重要。由于该列混合存储数字和非数字字符,我们可以假设它可能存储在VARCHAR或TEXT数据类型中。但由于数据格式看起来像JSON数组,因此列数据类型也可能是JSON。现在,这两种数据类型都有一个非常不同的查询结构

首先,让我们讨论一些问题:

当单元格值包含数字以外的字符时,它将被视为字符串。因此,使用平原。。如果value=[8,7,6]没有用引号括起来,您将得到错误代码:1064。 值在MySQL中,所以如果您想将其作为表列名使用,则始终需要将其包装为反勾号。否则,还将返回错误代码:1064: 现在让我们试试这个:

如果值的列数据类型为VARCHAR或TEXT,则只需将搜索值用单引号括起来,如下所示: 为MariaDB更新

如果值的列数据类型为JSON,则如下所示: 我提到的JSON方法


p/S:根据本文件。换句话说,当在MariaDB中创建一个带有JSON数据类型的表时,它将显示为LONGTEXT,但除了普通的LONGTEXT数据类型之外,它还有额外的定义

如果要进行严格相等的比较,则需要作为JSON对象进行比较。您可以通过使用将数据解析为JSON而不是文本来实现这一点:

SELECT * from table_name WHERE
  JSON_EXTRACT(`values`, '$') = JSON_EXTRACT('["8","7","6"]', '$');
只要您希望严格相等,就应该能够将其用于任何类型的JSON。如果要返回与给定JSON对象匹配的所有行,请使用

例如,要查找包含字符串8的所有值,可以使用以下命令:

SELECT * from table_name WHERE JSON_CONTAINS(`values`, '"8"');

请注意,这种匹配并不像您期望的那样简单,它匹配文档中的任何值。如果您的数据由JSON数组组成,这仍然足够。

带有数组的字段的数据类型是什么?请包括DDL。请运行SHOW CREATE TABLE_name。我们想知道列值的数据类型是什么。它的longtext。但我将其存储为json数组。当我运行SELECT*from table_name时,mysql给出1064错误,其中值->$[0]='8',值->$[1]='7',值->$[2]='6';请问您的MySQL的确切版本是什么?请运行“选择@@version”。请发布完整的错误消息10.4.18-MariaDB1064-您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解第2行“>$[0]=”8”和值->$[1]=”7”和值->$[2]=”3”和“v…”附近使用的正确语法
SELECT * from table_name where JSON_UNQUOTE(`values`)= '["8","7","6"]'
SELECT * from table_name WHERE
  JSON_EXTRACT(`values`, '$') = JSON_EXTRACT('["8","7","6"]', '$');
SELECT * from table_name WHERE JSON_CONTAINS(`values`, '"8"');