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

时间:2017-10-13 23:14:59

标签: sql ruby-on-rails ruby postgresql rails-activerecord

我正在尝试在POSTGRES表中获取行/行,其中带有下划线的列名称(“Cas_NO”)与特定字符串匹配。我在制定一个有效的查询时遇到了麻烦:

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

运行上面的代码给出了Database表中的整行,而不仅仅是“BAS_No”匹配@array_a中的“a”或“b”或“c”

1 个答案:

答案 0 :(得分:0)

那不是你真正的代码。这样说:

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

将生成一个SQL WHERE子句,如下所示:

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

并且这不是有效的SQL所以你应该得到一个ActiveRecord::StatementInvalid例外而不是一堆数据。

在任何情况下,您都不应该将=与值列表一起使用,您希望使用IN,最简单的方法是让ActiveRecord构建SQL:< / p>

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

或者,如果您对hashrockets过敏:

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

a是一个数组时,那些将在WHERE子句中生成IN (...)个表达式,你应该得到你期待的内容。