Sql 其中(..和…)搜索同一属性的两个值
我试过了Sql 其中(..和…)搜索同一属性的两个值,sql,ruby-on-rails,activerecord,Sql,Ruby On Rails,Activerecord,我试过了 @users = User.where(name: @request.requester or @request.regional_sales_mgr) 及 这似乎不起作用。我想要的是找到名称与@request.requester匹配的用户和名称与@request.regional_sales_mgr匹配的用户,并将它们都保存到变量@users中 您想在子句中使用SQL。Activerecord提供了此操作的快捷方式: @users = User.where(name: [@requ
@users = User.where(name: @request.requester or @request.regional_sales_mgr)
及
这似乎不起作用。我想要的是找到名称与@request.requester匹配的用户和名称与@request.regional_sales_mgr匹配的用户,并将它们都保存到变量@users中 您想在子句中使用SQL
。Activerecord提供了此操作的快捷方式:
@users = User.where(name: [@request.requester, @request.regional_sales_mgr]).all
为名称:
提供一个值数组将生成以下SQL语句:
SELECT * FROM users WHERE name IN (value1, value2, and so on...);
这应该可以找到名称为@request.requester
或@request.regional_sales_mgr
的所有用户。在一般情况下,“或”查询可以写成:
User.where("users.name = ? OR users.name = ?", request.requester, request.regional_sales_mgr)
注意:Rails 5将支持或使用:
User.where(name: request.requester).or(User.where(name: request.regional_sales_mgr))
对于此特定情况,作为其他答案中的状态,in查询更简单:
User.where(name: [request.requester, request.regional_sales_mgr])
Diego的回答应该可以解决Sabrams的问题,而不必使用rails 4.x中的all(查询名为x或y的用户)
对于那些像我一样找到这篇文章的人,实际上是在寻找一个rails all,你可以链接where's。例如,通过联接表仅获取同时具备这两种技能的用户。(这将返回同时具有x和y技能的用户,而不会返回仅具有x技能的用户)
您应该使用更明确的“users.name=?或users.name=?”
,以便在联接表也有name
列的情况下联接不会中断。或者按照@diego.greyrobot的建议使用.where
。以下查询:SELECT*FROM users where name IN(value1、value2、value3)
与此相同:从name=value1或name=value2或name=value3的用户中选择*代码>,因此这并不能回答问题@sabrams需要SQL子句和
User.where(name: [request.requester, request.regional_sales_mgr])
@users = User.where(name: [@request.requester, @request.regional_sales_mgr])
@users = User.joins(:skillable_joins).where(skillable_joins: { skill_id: 1 }).where(skillable_joins: { skill_id: 2 })