:joins VS :include => different results?

Hi there,

assume that:

1 we have the following situation:

Book :has_many Pages :has_many Illustrations
==== ===== =============

2 certain pages have NO illustrations

3 the following 2 cases:

A) Book.find(:all,
:joins => [:pages => [:illustrations]])

B) Book.find(:all,
:include => [:pages => [:illustrations]])

Question: Is it correct that:

  • in case A), the books containing pages WITHOUT any illustrations will
    NOT show up in the results
  • whereas in case B), these books WILL show up?

(Personally, I thought that the main difference between :joins and
:include was the “eager loading” part.)

Thanks for any explanation for this!
Tom

On Jun 2, 5:09 pm, Tom Ha [email protected] wrote:

Question: Is it correct that:

  • in case A), the books containing pages WITHOUT any illustrations will
    NOT show up in the results
  • whereas in case B), these books WILL show up?

(Personally, I thought that the main difference between :joins and
:include was the “eager loading” part.)

:joins does an inner join, :include doesn’t (and may not even do a
join at all)

Fred

:joins does an inner join, :include doesn’t (and may not even do a
join at all)

If you say “may not”, when would it do or not do a join, then? And which
type of join?

Doesn’t :include amount to a LEFT JOIN, actually?

IME :include does a join if you are using the ‘included’ table in the
query conditions:

A.find(:all, :conditions => ‘a.column=1’, :include => ‘b’) # no join
A.find(:all, :conditions => ‘a.column=1 AND b.column=2’, :include =>
‘b’) # join

A.find(:all, :conditions => ‘a.column=1 AND b.column=2’, :include =>
‘b’) # join

And if you say “join”, you mean a “LEFT join” here, if I got the story
right…

Thanks, guys!