2013-03-29 18 views
5

Rails’e yeni geliyorum ve SQL-tipi dillerle marjinal deneyimim var. Bir MySQL2MySQL 2 kullanarak Rails 3 projesinde WHERE IN nasıl kullanılır?

kullanarak Rails 3 proje üzerinde çalışıyorum

Burada bizim veritabanlarının İKİ üzerinde çalışmak istediğiniz bir genel SQL deyimi var. Bunu yalnızca ActiveRecord işlevselliği ile yapmanın bir yolu var mı? Başka bir deyişle

SELECT * FROM MyRecords 
WHERE (f1, f2, f3, f4) IN (
    SELECT f1, f2, f3, f4 
    FROM MyRecords 
    GROUP BY f1, f2, f3, f4 
    HAVING count(*) = 1 
); 

, bu cevap ihtiyacım olanı yapar sadece, bir "IN" deyimini yürütmek için (ve açıkçası, ben bile bir WHERE IN deyimi ne yaptığını bilmiyorum çalışıyorum: ?
def MyRecordFunction 
    MyRecords.where('org_id=?', self.org_id).order('f4') 
    end 

teşekkür ederiz: daha spesifik olmak gerekirse nasıl (ya da ben yapabilirsiniz) birden çok sütun (postgresql) üzerinde SELECT DISTINCT yok), ben yukarıdaki sorgu yapar, böylece aşağıdaki ActiveRecord işlevi artırmamız gerek.

+0

MySQL IN yan tümcesi tamamen kapsayıcı bir OR'dir. EG: Bu IN ('1', '2', '3') NEDEN ile aynı. NEREDE = '1' VEYA bu = '2' VEYA bu = '3' http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in – fyrye

cevap

0

bu deneyin:

MyRecord.joins("JOIN 
    (
    SELECT f1, f2, f3, f4 
    FROM my_records 
    GROUP BY f1, f2, f3, f4 
    HAVING count(*) = 1 
) a ON a.f1 = my_records.f1 AND 
     a.f2 = my_records.f2 AND 
     a.f3 = my_records.f3 AND 
     a.f4 = my_records.f4") 
27

ben biraz kafam karıştı ama bu aradığınız ne düşünüyorum: iç açıklamada

MyRecord.where(:org_id => [1, 2, 3]).order('f4') 

nerede belirli için göz Belirli bir alan için değerler, yukarıdaki örnekte, sorgu, org_id öğesinin 1,2 veya 3'ü içerdiği mY_records tablosuna bakacaktır.

Check Bu: Harish Shetty'nin anlamı vardır.