Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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 检查多个记录是否与一组值匹配_Mysql_Sql - Fatal编程技术网

Mysql 检查多个记录是否与一组值匹配

Mysql 检查多个记录是否与一组值匹配,mysql,sql,Mysql,Sql,有没有一种方法可以编写一个查询来检查一组行是否与一组值匹配?我需要匹配的每组值有一行,我想知道是否所有行都匹配。我可以通过多种查询执行此操作,例如: select * from tableName where (value1, value2) = ('someValue1', 'someValue2') select * from tableName where (value1, value2) = ('someOtherValue1', 'someOtherValue2') …等等,最多可执

有没有一种方法可以编写一个查询来检查一组行是否与一组值匹配?我需要匹配的每组值有一行,我想知道是否所有行都匹配。我可以通过多种查询执行此操作,例如:

select * from tableName where (value1, value2) = ('someValue1', 'someValue2')
select * from tableName where (value1, value2) = ('someOtherValue1', 'someOtherValue2')
…等等,最多可执行任意数量的查询。如果查询仅在所有值都匹配的情况下返回,那么如何将此类内容重新编写为单个查询?

关于:

SELECT * 
FROM tableName 
WHERE value1 IN ('someValue1', 'someOtherValue1') AND 
      value2 IN ('someValue2', 'someOtherValue2')

您可以尝试以下方法:

select t.* 
from tableName t
join (select 'someValue1' value1, 'someValue2' value2 union all
      select 'someOtherValue1', 'someOtherValue2') v
  on t.value1 = v.value1 and t.value2 = v.value2
where 2=
(select count(distinct concat(v1.value1, v1.value2))
 from (select 'someValue1' value1, 'someValue2' value2 union all
       select 'someOtherValue1', 'someOtherValue2') v1
 join tableName t1
   on t1.value1 = v1.value1 and t1.value2 = v1.value2)

如果要检查大量的值对,可以更容易地将它们插入临时表中,并在上面的查询中使用临时表,而不是两个单独的硬编码虚拟表。

如果正好找到两条记录,则匹配
选择错了q13和对了Q14的学生

SELECT qa.StudentID FROM questionAnswer qa, Student s 
WHERE qa.StudentID=s.StudentID   AND  
      ((QuestionID=13  AND Pass=0) OR (QuestionID=14 AND Pass=1))
GROUP BY qa.StudentID
HAVING COUNT(*)=2;
Where子句匹配q14正确而q13不正确的任何记录 然后我们按学生ID分组
having需要有两个记录

我进一步澄清了我的问题-在这个示例中,我希望有两行,因为我有两组需要匹配的值。我相信你建议的查询只需要一行就可以满足,因为它在子句中使用。@Josh我不太理解你,你能举个例子吗?嗯,但是
value1
如何匹配
someValue1
someOtherValue1
?非常感谢@马克·班尼斯特,我不明白concat的用法,而且似乎你错过了where后面的右括号。你能解释一下这个答案吗?@Raffaele:我已经更新了答案-我希望现在能更清楚一点。@Markbanister,很抱歉我不明白:(你在由
v join t
构建的字符串上使用
count distinct
,而不是
v1 join t1
(这是
select count
范围).我不明白所有这些代码的意义-可能是因为我不理解最初的问题:)参见@Raffaele:mea culpa-计数应该在v1的结果上(现在更正)。请参阅-如果在
person
中使用所有四条记录运行,它将返回两个指定值,但如果在没有John记录的情况下运行,它将不返回任何内容。