首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查SQL数组中的多个值

检查SQL数组中的多个值
EN

Stack Overflow用户
提问于 2011-07-16 04:32:59
回答 2查看 4.1K关注 0票数 2

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

代码语言:javascript
复制
SELECT
  (1, 7, 8) IN (1, 2, 3, 4, 5)
FROM DUAL

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

我意识到我可以添加几个检查,如下所示:

代码语言:javascript
复制
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 btw。

提前感谢,保持好的编程!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-11 15:51:42

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

代码语言:javascript
复制
SELECT REPLACE(CONCAT(",", "1, 7, 8", ",")," ", "")
       REGEXP CONCAT(",", REPLACE(REPLACE("1 ,2 , 3 , 4 ,5 " ," ", ""),",", ",|,"), ",")
FROM DUAL

解释:

  • 这只适用于逗号分隔的字符串,而不是示例中的列表。strings.
  • Commas
  • 该语句删除正则表达式中的任何空格,并在字符串两端添加以避免部分匹配。
  • 在正则表达式模式中,所有逗号都替换为逗号+管道符号+逗号,因此它用作OR,同时避免部分匹配。
票数 1
EN

Stack Overflow用户

发布于 2011-07-16 04:48:42

您是否可以使用简单连接来创建动态/临时表,并与其他值进行简单连接?

代码语言:javascript
复制
create table a (
id int);

insert into a values (1),(7),(8);

create table b like a;

insert into b values (1),(2),(3),(4),(5);


select a.* from a
inner join b
on a.id = b.id
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6712835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档