我正在尝试在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”
答案 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 (...)
个表达式,你应该得到你期待的内容。