2017-02-02 4 views
2

Ich bin neugierig, ob es eine einfache Möglichkeit, diese Abfrage zu archivieren:Verwenden Ergebnis einer Schiene, wo Abfrage für eine weitere Abfrage

SomeTable.where(value_b: SomeTable.where(value_a: 1).pluck(:value_b))

Ein Beispiel wenn wir haben:

SomeTable 
    |id | a | b | 
    |1 | 1 | 2 | 
    |2 | 2 | 2 | 
    |3 | 3 | 3 | 
    |4 | 4 | 4 | 

Und der Benutzer geben Sie die Nummer 1 in das System, ich möchte in der Lage sein, Wert von b wo Wert von a = 1 zu finden, die 2 ist. Verwenden Sie dann diesen Wert b, um alle Datensätze mit diesem Wert zu finden.

So möchte ich in der Lage sein 1 zu verwenden und extrahieren mit Sometable-ID: 1 und 2

Dank!

+0

Sie uns –

+0

beitreten können, können Sie bitte das genaue Schema –

+0

Post Ja. Bitte posten Sie das genaue Schema. Die von Ihnen gepostete macht keinen Sinn, weil 'SomeTable.where (value_a: 1)' Ihnen das gleiche Ergebnis gibt wie 'SomeTable.where (value_b: SomeTable.where (value_a: 1) .pluck (: value_b)) ' –

Antwort

0
SomeTable.joins("JOIN some_table as replica on replica.value_b = some_table.value_b") 
     .where(replica: {value_a: 1}) 
+1

Das funktioniert! Vielen Dank! – Tae

0
SomeTable.where("b in (SELECT b FROM some_tables where a = ?)", a_value) 

a_value ist Ihr 'a' Wert 'b' Wert zu finden

Verwandte Themen