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