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

时间:2012-04-03 06:36:25

标签: mysql sql

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

select * from tableName where (value1, value2) = ('someValue1', 'someValue2')
select * from tableName where (value1, value2) = ('someOtherValue1', 'someOtherValue2')

......依此类推,最多可查询任意数量的查询。如果所有值都匹配,那么这种事情怎么可能被重写为只查询返回的查询?

3 个答案:

答案 0 :(得分:2)

怎么样:

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

答案 1 :(得分:2)

您可以尝试以下方式:

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)

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

答案 2 :(得分:0)

如果找到两个记录,则进行匹配
选择Q13错误和Q14错误的学生

SCM_RIGHTS

where子句匹配q14正确和q13不正确的所有记录 然后,我们按StudentID分组 拥有两个记录