这是一个理论问题,但假设数据结构不能改变,这绝对是我们想要进行查询的方式。这个问题更多是为了更好地理解过滤器是如何动态组合的where
,而不是真正想要从这样的查询中获取结果。
想象一个带有 Car 表的数据库,其中每辆车都有一个manufacturer_id
包含 ID(例如“BD324”或“GM512”)的列,其中“BD”和“GM”被视为前缀。
我们需要在汽车表上进行查找,以便当汽车的manufacturer_id
前缀与给定的一组前缀匹配时返回汽车。所以,给定一个前缀列表:
prefixes = ["BD", "GM", "EX", "RD", "DE"]
..我们想要退回所有以列出的任何manufacturer_id
一个开头的汽车。即(喜欢 x或喜欢 y或喜欢 z)。
以下 Elixir/Ecto 代码将搜索一个前缀:
search_prefix = Enum.at(prefixes, 0) <> "%"
from c in Car, where: like(c.manufacturer_id, ^search_prefix)
where
我们将如何根据列表构建子句prefixes
?