2012-04-03 13 views
5

Bir dizi satırın bir değerler kümesiyle eşleşip eşleşmediğini kontrol etmek için tek bir sorgu yazmanın bir yolu var mı? Eşleştirmem gereken değerler kümesinde bir satır var ve tüm satırların eşleşip eşleşmediğini bilmek istiyorum. sorguları keyfi bir sayı kadar böyle devamBirden çok kaydın bir değerler kümesine eşleşip eşleşmediğini kontrol edin

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

... ve: Ben gibi birden sorguları yoluyla bu gerçekleştirebilir. Bu tür bir şey, tüm değerler eşleştirilirse, SADECE sorgunun döndüğü tek bir sorgu olarak nasıl yeniden yazılabilir?

+0

Hmm, ancak 'value1',' someValue1' ve ayrıca 'someOtherValue1' ile nasıl eşleştirebilir? –

cevap

2

Sen gibi bir şey deneyebilirsiniz:

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) 

Eğer denetlemek istediğiniz değer çiftleri çok sayıda varsa, içine eklemek daha kolay olabilir geçici bir tablo ve iki ayrı kodlanmış sanal tablo yerine, yukarıdaki sorgudaki geçici tabloyu kullanın.

+1

Mükemmel şeyler - çok takdir! – Josh

+0

@Mark Bannister, concat kullanımını anlamıyorum ve nereye gittikten sonra kapanış parantezini kaçırmışsınız gibi görünüyor. Bu cevabı açıklayabilir misiniz? – Raffaele

+0

@Raffaele: Cevabı güncelledim - Umarım artık biraz daha açık. –

2

Ne hakkında:

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

Sorumu biraz daha açıklığa kavuştum - bu örnekte, eşleştirmem gereken iki set değerine sahip olduğum için iki satır bekliyorum. IN cümlelerini kullandığı için önerdiğiniz sorgunun yalnızca bir satır tarafından karşılanacağına inanıyorum. – Josh

+0

@Josh Seni tam olarak anlamadım, bir örnek gönderir misin? –

İlgili konular