将附加条件附加到查询

Posted

技术标签:

【中文标题】将附加条件附加到查询【英文标题】:Append additional conditions to a query 【发布时间】:2021-11-16 19:36:08 【问题描述】:

我有一个查询,我需要添加几个条件作为OR 子句,因为我想使用LIKE,所以我不能使用IN

那么如何从一个数组中添加多个OR

SQL 应该如下所示:

SELECT * FROM TABLE where a like '%a%' OR a LIKE '%b%' OR a LIKE '%c%' ...

其中 'a'、'b'、'c' 来自数组。

dataset
   .where(column:, Sequel.like(:column, '%#myarray.first%'))

myarray.drop(1).each do |v|
    dataset.or(Sequel.like(:column, '%#v%'))
end

dataset.limit(100)

【问题讨论】:

SQL.like 来自哪里,它是如何实现的?这不是标准的 Rails 方法。 我更新了问题。这是“续集”而不是“SQL”。复制和粘贴错误。 【参考方案1】:

从Rails API docs 开始,.or 条件查询应该链接在.where 方法之后

dataset.where(column:, Sequel.like(:column, '%#myarray.first%'))
       .or(dataset.where(column:, Sequel.like(:column, '%#myarray.second%'))
       .or(dataset.where(column:, Sequel.like(:column, '%#myarray.third%'))

完整答案:

dataset = dataset.where(column:, Sequel.like(:column, '%#myarray.first%'))

myarray.drop(1).each do |v|
    dataset = dataset.or(dataset.where(column:, Sequel.like(:column, '%#v%'))
end

dataset.limit(100)

在“vanilla”Rails 中,如果没有 gem(假设 Sequel.like 来自这个 gem),同样可以实现。

dataset = dataset.where("column LIKE ?", '%#myarray.first%'))

myarray.drop(1).each do |v|
    dataset = dataset.or(dataset.where("column LIKE ?", '%#v%'))
end

dataset.limit(100)

【讨论】:

以上是关于将附加条件附加到查询的主要内容,如果未能解决你的问题,请参考以下文章

满足某些条件时,如何将字符串附加到一行?

使用 pandas 根据条件将 csv 值附加到列表

BigQuery SQL,将 SQL 查询结果附加到现有表

如何将多个 filter() 查询附加到一个变量中

循环 LINQ 查询并将结果附加到 DataTable

如何将查询字符串附加到错误文档