2012-04-03 9 views
5

¿Hay alguna forma de escribir una sola consulta para verificar si un conjunto de filas coincide con un conjunto de valores? Tengo una fila por conjunto de valores que necesito coincidir y me gustaría saber si todas las filas coinciden o no. Podría realizar esto a través de múltiples consultas como:Compruebe si hay registros múltiples que coincidan con un conjunto de valores

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

... y así sucesivamente, hasta un número arbitrario de consultas. ¿Cómo podría reescribirse este tipo de cosas como una sola consulta en la que la consulta SOLO devuelve si todos los valores coinciden?

+0

Hmm, pero ¿cómo puede 'value1' emparejar' someValue1' y también 'someOtherValue1'? –

Respuesta

2

Usted podría intentar algo como:

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) 

Si usted tiene un gran número de pares de valores que desea comprobar, puede ser más fácil para insertarlos en una tabla temporal y use la tabla temporal en la consulta anterior, en lugar de dos tablas virtuales separadas codificadas.

+1

Excelentes cosas, ¡muy apreciadas! – Josh

+0

@Mark Bannister, no entiendo el uso de concat, y parece que te perdiste un paréntesis de cierre después de dónde. ¿Puedes explicar esta respuesta? – Raffaele

+0

@Raffaele: He actualizado la respuesta, espero que esté un poco más clara ahora. –

2

¿Qué hay de:

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

Aclaré mi pregunta un poco más; en ese ejemplo, espero dos filas, ya que tengo dos conjuntos de valores que necesito hacer coincidir. Creo que la consulta que sugirió se satisfaría por una sola fila, ya que usa cláusulas IN. – Josh

+0

@Josh No te entendí del todo, ¿puedes publicar un ejemplo? –

Cuestiones relacionadas