我需要检查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,保持良好的编程!
答案 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
说明: