2017-10-13 128 views
0

我想獲取POSTGRES表中的行/行,其中具有下劃線(「Cas_NO」)的列名稱與特定字符串匹配。我有麻煩制定工作查詢:PLUCK一行WHERE postgres列名稱包含下劃線

@array_a = ["a", "b", "c"] 
@array_b 
@array_a.each do |a| 
    @array_b << Database.where("\"BAS_No\" = ?", a).pluck(:INBC_name) 
end 

運行上面的代碼讓我從數據庫表中的整行,而不僅僅是其中的「BAS_No」匹配「A」或「B」或「C」 @array_a

回答

0

這不是你真正的代碼。說這句話的:

Database.where("\"BAS_No\" = ?", %w[a b c]) 

會產生一個SQL WHERE子句是這樣的:

where ("BAS_No" = 'a','b','c') 

這不是有效的SQL,所以你應該得到一個ActiveRecord::StatementInvalid例外,而不是一堆數據。

在任何情況下,你不應該使用=與值的列表,您要使用IN和最簡單的辦法就是讓ActiveRecord的生成SQL:

Database.where(:BAS_No => a).pluck(:INBC_Name) 
#--------------^^^^^^^^^^^^ 

,或者,如果你是過敏hashrockets:

Database.where(BAS_No: a).pluck(:INBC_Name) 
#--------------^^^^^^^^^ 

a是一個數組,這些會產生IN (...)表達式在WHERE子句中,你應該回到你期待什麼。