PLUCK一行WHERE postgres列名称包含下划线

问题描述:

我想获取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

这不是你真正的代码。说这句话的:

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子句中,你应该回到你期待什么。