/ / Controlla se più record corrispondono a un insieme di valori - mysql, sql

Controlla se più record corrispondono a un insieme di valori: mysql, sql

C'è un modo per scrivere una singola query da verificarese una serie di righe corrisponde a un insieme di valori? Ho una riga per set di valori che ho bisogno di abbinare e mi piacerebbe sapere se tutte le righe sono abbinate o no. Potrei farlo tramite più query come:

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

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

risposte:

2 per risposta № 1

Potresti provare qualcosa come:

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 hai un numero elevato di coppie di valorivuoi controllare, potrebbe essere più facile inserirli in una tabella temporanea e utilizzare la tabella temporanea nella query precedente, invece di due tabelle virtuali codificate separate.


2 per risposta № 2

Che dire:

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