我不想使用加入
我想手动将任何字段与其他表字段进行比较
例如
选择 u.user_id,t.task_id
FROM 任务 t,用户 u
WHERE u.user_id = t.user_id
我如何在 Rails 中编写此查询?
我不想使用加入
我想手动将任何字段与其他表字段进行比较
例如
选择 u.user_id,t.task_id
FROM 任务 t,用户 u
WHERE u.user_id = t.user_id
我如何在 Rails 中编写此查询?
假设您的模型中有关联,您可以简单地执行以下操作
User.joins(:tasks).select('users.user_id, tasks.task_id')
你也可以这样做
User.includes(:tasks).where("user.id =tasks.user_id")
包括将做预先加载检查下面的例子或在这里阅读预先加载
users = User.limit(10)
users.each do |user|
puts user.address.postcode
end
这将运行 11 个查询,称为 N+1 查询问题(首先查询以获取所有行,然后再次查询每一行以执行某些操作)。with include Active Record 确保使用尽可能少的查询来加载所有指定的关联。
现在当你这样做的时候;
users = User.includes(:address).limit(10)
user.each do |user|
puts user.address.postcode
end
它将仅生成 2 个查询,如下所示
SELECT * FROM users LIMIT 10
SELECT addresses.* FROM addresses
WHERE (addresses.user_id IN (1,2,3,4,5,6,7,8,9,10))
另外,如果您没有关联,请阅读以下内容;
您应该查看http://guides.rubyonrails.org/association_basics.html 假设您正在尝试进行内部连接,默认情况下,在 Rails 中,当我们关联两个模型然后查询它们时,我们正在进行内部连接那些桌子。
您必须在模型之间创建关联示例如下所示
class User
has_many :reservations
...# your code
end
在预订中
class Reservations
belongs_to :user
... #your code
end
现在当你做
User.joins(:reservations)
生成的查询如下所示
"SELECT `users`.* FROM `users` INNER JOIN `reservations` ON `reservations`.`user_id` = `users`.`id`"
您可以通过User.joins(:reservations).to_sql
在终端中执行来检查查询
希望它能回答你的问题
User.find_by_sql("YOUR SQL QUERY HERE")
你可以如下使用..
User.includes(:tasks).where("user.id =tasks.user_id").order(:user.id)