2012-04-03 13 views
5

Czy istnieje sposób napisania pojedynczego zapytania w celu sprawdzenia, czy zestaw wierszy jest zgodny z zestawem wartości? Mam jeden wiersz na zestaw wartości, które muszę dopasować i chciałbym wiedzieć, czy wszystkie wiersze są dopasowane czy nie. Mogłem wykonać to za pomocą wielu zapytań, takich jak:Sprawdź, czy wiele rekordów pasuje do zestawu wartości.

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

... i tak dalej, aż do dowolnej liczby zapytań. W jaki sposób tego rodzaju rzeczy można ponownie napisać jako pojedyncze zapytanie, w którym zapytanie zwraca TYLKO, jeśli wszystkie wartości są dopasowane?

+0

Hmm, ale w jaki sposób 'wartość1' może się równać' someValue1', a także 'someOtherValue1'? –

Odpowiedz

2

Można spróbować czegoś takiego:

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) 

Jeśli masz dużą liczbę par wartości, które chcesz sprawdzić, może łatwiej będzie wstawić je do tabela tymczasowa i użyj tabeli tymczasowej w powyższym zapytaniu, zamiast dwóch oddzielnych, zakodowanych na sztywno tabel wirtualnych.

+1

Doskonałe rzeczy - bardzo doceniane! – Josh

+0

@ Mark Bannister, nie rozumiem użycia konkatencji i wydaje się, że przegapiłeś nawias zamykający po tym, gdzie. Czy możesz wyjaśnić tę odpowiedź? – Raffaele

+0

@Raffaele: Zaktualizowałem odpowiedź - mam nadzieję, że teraz jest trochę jaśniej. –

2

Co o:

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

Ja wyjaśniłem moje pytanie nieco więcej - w tym przykładzie oczekuję dwóch wierszy, ponieważ mam dwa zestawy wartości, które muszę dopasować. Uważam, że zapytanie, które zasugerowałeś, byłoby spełnione tylko przez jeden wiersz, ponieważ używa ono klauzul IN. – Josh

+0

@Josh Nie bardzo cię rozumiem, czy możesz podać przykład? –

Powiązane problemy