我有以下查询,我尝试使用IN
子句基于多个部门ID获取部门表数据,但我在Rails
服务器日志中看到的查询不正确,因此数据取文失败。报价问题。
我在这里尝试了两种不同的选项,但由于缺少引号或额外的引号,它们都失败了。
选项1(在CSV转换期间添加引号)
@depts = current_user.depts
puts @depts # prints IT Account Finance
# converting to CSV string here
@dept_ids_csv = @depts.gsub(" ", "','")
puts @dept_ids_csv # prints IT','Account','Finance
@dept_data = Department.find_by_sql(["select * from departments a where a.dept_id in (?)", @dept_ids_csv])
预期查询日志:
select * from departments a where a.dept_id in ('IT','Account','Finance')
生成的实际查询日志(因为soem原因会自动附加额外的引号) - FAILS:
select * from departments a where a.dept_id in ('IT'',''Account'',''Finance')
选项2(在CSV转换期间删除引号)
@depts = current_user.depts
puts @depts # prints IT Account Finance
# converting to CSV string here
@dept_ids_csv = @depts.gsub(" ", ",")
puts @dept_ids_csv # prints IT,Account,Finance
@dept_data = Department.find_by_sql(["select * from departments a where a.dept_id in (?)", @dept_ids_csv])
预期查询日志:
select * from departments a where a.dept_id in ('IT','Account','Finance')
生成实际查询日志(IN子句中缺少引号) - FAILS:
select * from departments a where a.dept_id in ('IT,Account,Finance')
如何解决此问题?
答案 0 :(得分:1)
尝试将字符串拆分为数组并将其传递给where子句。
@dept_data = Department.where(dept_id: @depts.split(" "))
答案 1 :(得分:0)
如何通过.split(' ')
将字符串转换为数组?
示例:
@emails = ['spree@example.com', 'test@gmail.com']
User.find_by_sql(["SELECT * FROM spree_users WHERE email IN (?)", @emails])
给出
SELECT * FROM users WHERE email IN ('spree@example.com','test@gmail.com')