Ruby项目中如何根据参数关联双表查询Table2目标数据?
解决方案
你可以通过两种常见的SQL写法实现需求,同时要注意使用参数绑定避免SQL注入风险:
方法一:JOIN关联查询
这种方式通过关联两张表直接获取目标数据,性能通常更优:
def self.some_function(special_param) data = find_by_sql([ "SELECT t2.* FROM table2 t2 JOIN table1 t1 ON t2.joinable_column = t1.joinable_column WHERE t1.special_param_column = ?", special_param ]) return data end
方法二:子查询
如果逻辑上更倾向先找到匹配的joinable_column再查询Table2,可以用子查询:
def self.some_function(special_param) data = find_by_sql([ "SELECT * FROM table2 WHERE joinable_column IN ( SELECT joinable_column FROM table1 WHERE special_param_column = ? )", special_param ]) return data end
说明
- 两种写法都能实现需求:当传入
special_param = 208时,会返回Table2中joinable_column为Keanu Reeves的所有记录(即示例中的第1、4行) - 使用
?作为参数占位符,Rails会自动处理参数绑定,避免SQL注入问题 - 注意将SQL中的表名
table1、table2替换为你实际的数据库表名(通常是模型名的复数形式)
内容的提问来源于stack exchange,提问作者JBrown
相关产品推荐
相关产品推荐

