Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 检查SQL数组中的多个值_Mysql_Sql_Arrays - Fatal编程技术网

Mysql 检查SQL数组中的多个值

Mysql 检查SQL数组中的多个值,mysql,sql,arrays,Mysql,Sql,Arrays,我需要检查SQL数组中是否存在多个值中的一个或多个。 最简单的形式是这样的: SELECT (1, 7, 8) IN (1, 2, 3, 4, 5) FROM DUAL 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 显然,这种说法行不通。只有在数组中只检查一个值时,它才起作用。但我需要知道,如果一个不是全部!SQL数组中存在我提供的所有值。如果数组中存在一个

我需要检查SQL数组中是否存在多个值中的一个或多个。 最简单的形式是这样的:

SELECT
  (1, 7, 8) IN (1, 2, 3, 4, 5)
FROM DUAL
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
显然,这种说法行不通。只有在数组中只检查一个值时,它才起作用。但我需要知道,如果一个不是全部!SQL数组中存在我提供的所有值。如果数组中存在一个或多个值,则该语句应返回TRUE;如果没有值,则返回FALSE

我意识到我可以添加几张支票,如下所示:

SELECT
  (1, 7, 8) IN (1, 2, 3, 4, 5)
FROM DUAL
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


提前Thanx,继续做好编程

可以使用简单联接创建动态/临时表并与其他值进行简单联接吗

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

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

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

这仅适用于逗号分隔的字符串,而不适用于列表中的列表 实例 该语句从字符串中删除所有空格。 在字符串的两端添加逗号以避免部分匹配。 在正则表达式模式中,所有逗号都替换为逗号+管道符号+逗号,因此 用作OR,同时避免部分匹配。
您的编程逻辑是否可以传递一个表,因为SQL最适合于表,而不是分隔列表?这个表是什么样子的?如果类似于:从DUAL中选择1,7,8,那么这是可能的,但我可以将其构建到SQL语句中。我仍然不知道如何测试SQL数组的值。在.net中,比如datatable或数组。逗号分隔的列表不是数组,这是一个字符串。为什么在MySQL中需要对其求值?我理解这一点,但我想将这些值粘贴到现有的SQL语句中,因此我将数组转换为逗号分隔的列表。我很好奇,对于您的答案和从a中选择a.*的查询计划是否相同,其中a.id在从b中选择b.id。你认为一个解释会揭示这两个问题实际上是相同的吗?@Kirk Olson。不客气。@克里斯·坎宁安。我通常倾向于避免使用IN子句,因为在mysql版本<5.5的情况下,速度会慢一些,但我不是像Quassnoi和其他SO用户那样的sql查询优化专家@nick rulez我希望Kirk能帮我们解释并让我们知道。还有时间成为专家!