数组在数组字段中的SQL查询

数组在数组字段中的SQL查询,sql,ruby-on-rails,ruby,postgresql,ruby-on-rails-4,Sql,Ruby On Rails,Ruby,Postgresql,Ruby On Rails 4,我有一个表,它有一个数组字段,名为countries,例如,在这个名为country\u list的表中,我有以下记录 Name Countries Asia ['Malaysia, Singapore, Hong Kong] Worldwide ['Malaysia, Singapore, Hong Kong, Croatia, USA] 现在,如果我想查询这个表,找出哪些记录有['Malaysia,'Singapore'],我该如何在ruby控制台中编

我有一个表,它有一个数组字段,名为
countries
,例如,在这个名为
country\u list的表中,我有以下记录

Name         Countries
Asia         ['Malaysia, Singapore, Hong Kong]
Worldwide    ['Malaysia, Singapore, Hong Kong, Croatia, USA]
现在,如果我想查询这个表,找出哪些记录有
['Malaysia,'Singapore']
,我该如何在ruby控制台中编写查询

我试着这样做,但没有成功

CountryList.where(“马来西亚、新加坡境内的国家”)
但它并没有像预期的那样起作用


非常感谢您的帮助

查询序列化数据没有直接的方法。但另一个解决方法是从所有结果中选择/过滤。例如:

Model.all.选择{| s |(s.countries&[“马来西亚”, “新加坡”])。现在吗?}

试试这个:

countries = ['Malaysia', 'Singapore']
query = CountryList.where(":name = ANY(country_list.countries)", name: countries[0])

countries[1..-1].each do |c|
  query = query.or(CountryList.where(":name = ANY(country_list.countries)", name: c))
 end
query
检查了它的工作情况


谢谢

这是一种奇怪的方法。我想知道你为什么不把
国家
地区
联系起来。生活会更轻松一些。@jvillian因为我从ISO3166全球配置中获得了我的地区和国家列表,并且这些记录中的每一个都与一个公司关联,这意味着每个记录都有一个公司id字段。制作国家和地区表需要手动将记录输入这些表中,我认为这不是必需的。这是正确答案。为了确定值是否包含在
postgres
数组列中,必须使用
value=ANY(列)
搜索数组中的所有值。这意味着,如果要搜索多个值,则需要使用
单独搜索它们。如果您想确保马来西亚和新加坡都存在,您可以通过
query=query.where(“:name=ANY(country\u list.countries)”,name:c)使用