2012-04-03 7 views
5

Esiste un modo per scrivere una singola query per verificare se un insieme di righe corrisponde a un insieme di valori? Ho una riga per set di valori che devo abbinare e vorrei sapere se tutte le righe sono abbinate o meno. Ho potuto eseguire questa via più query come ad esempio:Verifica se più record corrispondono a un set di valori

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

... e così via, fino ad un numero arbitrario di query. In che modo questo genere di cose potrebbe essere riscritto come una singola query in cui la query restituisce SOLO se tutti i valori sono abbinati?

+0

Hmm, ma come può 'valore1' corrisponde a' qualcheValore1' e anche 'qualcheAltroValore1'? –

risposta

2

Si potrebbe provare qualcosa di simile:

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) 

Se si dispone di un gran numero di coppie di valori che si desidera controllare, può essere più facile per inserirli in una tabella temporanea e utilizzare la tabella temporanea nella query precedente, anziché due tabelle virtuali codificate separate.

+1

Roba eccellente - molto apprezzata! – Josh

+0

@ Mark Bannister, non capisco l'uso concat, e sembra che tu abbia perso una parentesi chiusa dopo il dove. Puoi spiegare questa risposta? – Raffaele

+0

@Raffaele: ho aggiornato la risposta - spero che ora sia un po 'più chiara. –

2

Che dire:

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

Ho chiarito la mia domanda un po 'di più - in questo esempio mi aspetto due righe perché ho due serie di valori che devo abbinare. Credo che la query che hai suggerito sarebbe soddisfatta da una sola riga poiché utilizza le clausole IN. – Josh

+0

@Josh Non ti ho capito bene, puoi pubblicare un esempio? –

Problemi correlati