gpt4 book ai didi

mysql - 这两个查询在连接上的区别以及包括使用合并

转载 作者:行者123 更新时间:2023-11-29 17:46:09 24 4
gpt4 key购买 nike

所以基本上我正在rails控制台中进行尝试,我发现使用连接和包含进行查询时存在一些差异。我知道它们之间的区别,例如使用 join 的延迟加载和使用 include 的急切加载。但下面的代码似乎让我感到困惑,它们有什么不同吗?为什么不将工作与包含合并。

Table1.joins(:table2).merge(Table2.where(field_of_table2: "value")

Table1.joins(:table2).where(:table2 => {field_of_table2: "value"})

两者似乎都给了我相同的结果。

Table1.includes(:table2).merge(Table2.where(field_of_table2: "value")

合并似乎不适用于包含,但是,

Table1.includes(:table2).where(:table2 => {field_of_table2: "value")

可以工作,但会再次生成复杂的 sql 语句。

我对此很陌生,请帮助我了解使用这两个语句的任何不良影响。如果需要,我很乐意发布 sql 语句。

最佳答案

合并 - 如果 table2 是 ActiveRecord::Relation,则合并 table2 中的条件。如果 table2 是一个数组,则返回一个数组,表示结果记录与 table2 的交集。

Where - 返回一个新关系,该关系是根据参数中的条件过滤当前关系的结果。

Where 基本上是在给定条件下过滤当前关系,但合并返回其他关系的公共(public)行。

例如。

class Book < ActiveRecord::Base
scope :available, where(:available => true)
end

class Author < ActiveRecord::Base
has_many :books
scope :with_available_books, joins(:books).merge(Book.available)
end


Author.with_available_books

上述状态返回所有书籍,包括可用的书籍。

关于mysql - 这两个查询在连接上的区别以及包括使用合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49813621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com