mysql - 检查 SQL 数组中的多个值

标签 mysql sql arrays

我需要检查 SQL 数组中是否存在多个值中的一个(或多个)。 在最简单的形式中,它看起来像这样:

SELECT
  (1, 7, 8) IN (1, 2, 3, 4, 5)
FROM DUAL

显然这种说法是行不通的。只有当我只检查数组中的一个值时它才有效。但是我需要知道我提供的值中的一个(不是全部!)是否存在于 SQL 数组中。如果数组中存在一个或多个值,该语句应返回 TRUE,否则返回 FALSE。

我意识到我可以像这样添加几个检查:

SELECT
   1 IN (1, 2, 3, 4, 5)
OR 7 IN (1, 2, 3, 4, 5)
OR 8 IN (1, 2, 3, 4, 5)
FROM DUAL

然而,我的编程逻辑以数组格式“(1, 7, 8)”提供值,每次我需要运行 SQL 语句时,此数组中的值数量都不同。如果我能以某种方式将这个数组粘贴到我现有的 SQL 语句中,而不是在每次运行时重建 SQL 语句,并为数组中的每个值创建“OR”语句,那将非常方便。

有没有办法做到这一点?顺便说一句,我正在使用 MySQL。

提前致谢,保持良好的编程!

最佳答案

您可以将 REGEXP 与逗号分隔的字符串一起使用。您必须先将值转换为字符串。

SELECT REPLACE(CONCAT(",", "1, 7, 8", ",")," ", "")
       REGEXP CONCAT(",", REPLACE(REPLACE("1 ,2 , 3 , 4 ,5 " ," ", ""),",", ",|,"), ",")
FROM DUAL

解释:

  • 这只适用于以逗号分隔的字符串,不适用于您的列表 例子。
  • 该语句从字符串中删除所有空格。
  • 在字符串的两端添加逗号以避免部分匹配。
  • 在正则表达式模式中,所有逗号都被逗号 + 竖线符号 + 逗号代替,所以它 作为 OR 工作,同时避免部分匹配。

关于mysql - 检查 SQL 数组中的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6712835/

相关文章:

mysql - 每个连接只能打开并使用一个流结果集。确保您已对任何事件结果调用 .close()

MySQL 增加一列并插入它

c# - 通用 SQL 生成器 .NET

mysql - 在包含 10 亿行的表中查找重复条目

arrays - Julia,将 2d 数组合并到 3d 数组上?

mysql - INSERT INTO 表名,同时包含变量和 SELECT FROM

PHP:从 MySQL 数据库中过滤和导出大量数据

mysql - 使用 LIKE 和 WHERE 的 SQL 搜索查询

ios - 通过在本地更新数组模型来重新加载特定的表格 View 单元

python - numpy.arrays 的 fsum,稳定求和