2009-04-27 29 views
10

Tablodaki bir çift değer için MySQL'te arama yapmanın daha iyi bir yolunu bulmakta zorlanıyorum. Bir dizide değer çiftleri var ve IN() işlevini çoğaltmak istiyorum, ancak 1'den fazla değer için. Örneğin;İki değer/dizi için MySQL IN()?

SELECT * FROM [table] WHERE 
(column1 = 'foo' AND column2 = 1) OR 
(column1 = 'boo' AND column2 = 2) OR 
(column1 = 'goo' AND column2 = 3); 

Ben kadar çok var ki görünce daha "seksi" çözümü vardır düşünmek istiyorum:

foo,1 
boo,2 
goo,3 

şimdiki çözüm beni koyar: Aşağıdaki 3 çift var yüz çiftleri ve OR'ları olan bu tür şeyler beni mide bulandırıyor. Teşekkürler!!!

cevap

30
SELECT * 
FROM foo 
WHERE (column1, column2) IN (('foo', 1), ('bar', 2)) 

Bu sözdizimi kafa karıştırıcı olabilir ve ile değiştirmek için daha okunabilir olabilir:

SELECT * 
FROM foo 
WHERE ROW(column1, column2) IN (ROW('foo', 1), ROW('bar', 2)) 

Ben öncekine alışkınım :)

+0

! Gördüğün kadar bariz görünüyor. – Typhon

+0

Bu tam olarak aradığım şey! Bilmiyordum .. Teşekkürler dostum! – Tenaciousd93

2

olsa Mümkünse Değerlerinizi tempolu bir masaya (sadece iki sütuna ihtiyacınız var) kolayca ve hızlı bir şekilde alın, sadece yolunuzu orada birleştirebilirsiniz. Değilse, @ Quassnoi sürümünü kullanmanız gerekir.

0

@Quassnoi and @KM !!!

Ayrıca, çiftleri çiftleri almak ve post-processing için onları seçebilir: Büyük yaradı

SELECT * 
FROM `foo` 
WHERE (`id_obj` , `Foo_obj`) 
IN (
    SELECT `id_obj` , `Foo_obj` 
    FROM `foo` 
    GROUP BY `id_obj` , `Foo_obj` 
    HAVING count(*) > 1 
)