Sql 从多个表中选择字段

Sql 从多个表中选择字段,sql,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,Sql,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,除了使用execute方法之外,还有其他方法在rails中编写此查询吗 connection.execute("select value_1, value_2, value_3 from table1 join table2 on table2.table1_id = table1.id where table2.table3_id = table3_id_value") 如果你遵从Rails关于名字复数和大写的惯例,那就容易多了 然后,如果表1是真正的foos,表2是与活动记录Foo和Bar

除了使用execute方法之外,还有其他方法在rails中编写此查询吗

connection.execute("select value_1, value_2, value_3 from table1 join table2 on table2.table1_id = table1.id where table2.table3_id = table3_id_value")

如果你遵从Rails关于名字复数和大写的惯例,那就容易多了

然后,如果表1是真正的
foos
,表2是与活动记录
Foo
Bar
相对应的
Bar
,那么您需要

belongs_to :foo
栏中
记录。这对应于外键
foo\u id
。然后添加匹配项

has_many :bars
Foo
记录中。这允许检索使用
foo.bar
引用
foo
的所有
bar
记录。所有这些就绪后,查询将

Foo.join(:bar).select(:value_1, :value_2, :value_3)
   .where('bars.table3_id = ?, table3_id_value)

可以覆盖表名和外键名的默认约定。在中查找正确的选项。

如果您按照Rails的惯例将名称复数化和大写,则更容易

然后,如果表1是真正的
foos
,表2是与活动记录
Foo
Bar
相对应的
Bar
,那么您需要

belongs_to :foo
栏中
记录。这对应于外键
foo\u id
。然后添加匹配项

has_many :bars
Foo
记录中。这允许检索使用
foo.bar
引用
foo
的所有
bar
记录。所有这些就绪后,查询将

Foo.join(:bar).select(:value_1, :value_2, :value_3)
   .where('bars.table3_id = ?, table3_id_value)

可以覆盖表名和外键名的默认约定。在中查找正确的选项。

谢谢您的提示!因此,我只是运行了您建议的一个稍微修改的版本(必须在select值周围添加括号,并在“bar”中添加一个“s”),并且只返回了三个select值中的两个(其中一个不是来自Foo)。有什么想法吗?活动记录联接界面不允许访问联接记录的字段。你必须使用一个较低级别的电话。谢谢你的提示!因此,我只是运行了您建议的一个稍微修改的版本(必须在select值周围添加括号,并在“bar”中添加一个“s”),并且只返回了三个select值中的两个(其中一个不是来自Foo)。有什么想法吗?活动记录联接界面不允许访问联接记录的字段。您必须使用一个较低级别的呼叫。