检查SQL数组中的多个值

时间:2011-07-15 20:32:59

标签: 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 btw。

提前完成Thanx,保持良好的编程!

2 个答案:

答案 0 :(得分:1)

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

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 :(得分:1)

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

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

说明:

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