# SQL joins question

**URL:** <https://www.ruby-forum.com/t/sql-joins-question/166987>\
**Category:** Rails\
**Created:** [May 1, 2009, 6:55pm UTC](https://www.ruby-forum.com/t/sql-joins-question/166987 "2009-05-01T18:55:00Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![furrot](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/3da27b/32.png) [@furrot](https://www.ruby-forum.com/u/furrot)\
**Post date:** [May 1, 2009, 6:55pm UTC](https://www.ruby-forum.com/t/sql-joins-question/166987/1 "2009-05-01T18:55:00Z")

</div>

I want to link up 3 tables to list all members of a particular group. My  
code (which is wrong) looks like this:

@group\_members = Membership.find( :all,  
:joins =\> [‘FROM memberships INNER  
JOIN groups ON memberships.group\_id= group.id’ + ‘INNER JOIN users ON  
memberships.user\_id=users.id’])

This gives me an “association name not found” error. From my log file  
the sql string is as follows:

‘FROM memberships INNER JOIN groups ON memberships.group\_id=  
group.idINNER JOIN users ON memberships.user\_id=users.id’

Can anyone please let me know where I’m going wrong - SQL is not my  
fortÃ© :@/

Thanks

Steve

---

<div class="post-metadata">

**Author:** ![furrot](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/3da27b/32.png) [@furrot](https://www.ruby-forum.com/u/furrot)\
**Post date:** [May 1, 2009, 7:02pm UTC](https://www.ruby-forum.com/t/sql-joins-question/166987/2 "2009-05-01T19:02:26Z")

</div>

I don’t know the answer but something that jumped out at me was that you  
don’t have a space in between “group.idINNER”. You may want to try it  
with something like

:joins =\> [‘FROM memberships INNER JOIN groups ON memberships.group\_id=  
group.id’ + ’ INNER JOIN users ON memberships.user\_id=users.id’])

Note the single space before second INNER

-S

Stephen F. wrote:

> I want to link up 3 tables to list all members of a particular group. My  
> code (which is wrong) looks like this:
> 
> @group\_members = Membership.find( :all,  
> :joins =\> [‘FROM memberships INNER  
> JOIN groups ON memberships.group\_id= group.id’ + ‘INNER JOIN users ON  
> memberships.user\_id=users.id’])
> 
> This gives me an “association name not found” error. From my log file  
> the sql string is as follows:
> 
> ‘FROM memberships INNER JOIN groups ON memberships.group\_id=  
> group.idINNER JOIN users ON memberships.user\_id=users.id’
> 
> Can anyone please let me know where I’m going wrong - SQL is not my  
> fortÃ© :@/
> 
> Thanks
> 
> Steve

---

<div class="post-metadata">

**Author:** ![furrot](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/3da27b/32.png) [@furrot](https://www.ruby-forum.com/u/furrot)\
**Post date:** [May 1, 2009, 7:03pm UTC](https://www.ruby-forum.com/t/sql-joins-question/166987/3 "2009-05-01T19:03:07Z")

</div>

Do you have a space between group.idINNER JOIN users?  
In your code and log file, it looks like the space is missing.

On May 1, 9:55 am, Stephen F. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![furrot](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/3da27b/32.png) [@furrot](https://www.ruby-forum.com/u/furrot)\
**Post date:** [May 1, 2009, 7:51pm UTC](https://www.ruby-forum.com/t/sql-joins-question/166987/4 "2009-05-01T19:51:44Z")

</div>

On May 1, 5:55 pm, Stephen F. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> I want to link up 3 tables to list all members of a particular group. My  
> code (which is wrong) looks like this:
> 
> @group\_members = Membership.find( :all,  
> :joins =\> [‘FROM memberships INNER  
> JOIN groups ON memberships.group\_id= group.id’ + ‘INNER JOIN users ON  
> memberships.user\_id=users.id’])

this form of sql assumes that you are giving it a list of associaton  
names, ie

Membership.find(:all, :joins =\> [:groups, :users]) looks like it would  
do what you are trying to do.

The other form involves sql fragments, in which case you must provide  
one such fragment, not an array ie

@group\_members = Membership.find( :all,  
:joins =\> ‘INNER JOIN groups ON  
memberships.group\_id= group.id INNER JOIN users ON  
memberships.user\_id=users.id’)

Fred
