# Query: left join

**URL:** <https://www.ruby-forum.com/t/query-left-join/78516>\
**Category:** IT\
**Created:** [December 6, 2006, 2:05pm UTC](https://www.ruby-forum.com/t/query-left-join/78516 "2006-12-06T14:05:28Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [December 6, 2006, 2:05pm UTC](https://www.ruby-forum.com/t/query-left-join/78516/1 "2006-12-06T14:05:28Z")

</div>

Ciao a Tutti  
ho questa query:

SELECT DIPENDENTI.PRG, TVISITA.DIPEND, COGNOME, NOME, DATA  
FROM DIPENDENTI LEFT JOIN TVISITA ON (TVISITA.DIPEND=DIPENDENTI.PRG)  
ORDER BY COGNOME, NOME

Io ho fatto così, è corretto?

@dipendenti = Dipendente.find(:all, :select =\> “dipendenti.prg, cognome,  
nome, data”, :include =\> “Tvisita”, :order =\> “cognome, nome”)

Provandolo mi dà questo errore:  
Association named ‘Tvisita’ was not found

Qualcuno mi può dire cosa sbaglio?

```
    Paolo
```

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [December 6, 2006, 3:25pm UTC](https://www.ruby-forum.com/t/query-left-join/78516/2 "2006-12-06T15:25:40Z")

</div>

premetto che non ho mai usato :include, io i join li faccio  
così.@comments = TravelComment.find(:all,  
:conditions =\> [“travel\_id = ?”,params[:id]],  
:joins =\> “inner join users on user\_id = users.id”)

o così, notare l’ “as w” che pur dichiarandolo nel joins lo usa anche in  
conditions

@watching\_rides = WatchingRide.find(:all,  
:conditions =\> [“w.user\_id = ?”,current\_user.id],  
:joins =\> “as w inner join rides on w.object\_id = rides.id”)

Saluti Andrea

----- Original Message -----  
From: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
To: “Ruby” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Sent: Wednesday, December 06, 2006 2:04 PM  
Subject: [ruby-it] QUERY: LEFT JOIN

Ciao a Tutti  
ho questa query:

SELECT DIPENDENTI.PRG, TVISITA.DIPEND, COGNOME, NOME, DATA  
FROM DIPENDENTI LEFT JOIN TVISITA ON (TVISITA.DIPEND=DIPENDENTI.PRG)  
ORDER BY COGNOME, NOME

Io ho fatto così, è corretto?

@dipendenti = Dipendente.find(:all, :select =\> “dipendenti.prg, cognome,  
nome, data”, :include =\> “Tvisita”, :order =\> “cognome, nome”)

Provandolo mi dà questo errore:  
Association named ‘Tvisita’ was not found

Qualcuno mi può dire cosa sbaglio?

```
    Paolo

```

* * *

Ml mailing list  
removed\_email\_address@domain.invalid  
[http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [December 6, 2006, 3:59pm UTC](https://www.ruby-forum.com/t/query-left-join/78516/3 "2006-12-06T15:59:42Z")

</div>

[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> Provandolo mi dÃ questo errore:  
> Association named ‘Tvisita’ was not found
> 
> Qualcuno mi puÃ² dire cosa sbaglio?

No. :include vuole il nome dell’associazione non quello del  
modello. Semmai dovresti scrivere:

dipendenti = Dipendente.find(:all, :include =\> :tvisite)

ammesso che il tuo modello sia una cosa simile a:

class Dipendente \< ActiveRecord::Base  
set\_primary\_key ‘prg’  
has\_many :tvisite, :class\_name =\> ‘TVisita’, :foreign\_key =\> ‘dipend’

…  
end

class TVisita \< ActiveRecord::Base  
belongs\_to :dipendente, :class\_name =\> ‘Dipendente’, :foreign\_key =\>  
‘dipend’  
…  
end

e quindi potrai accedere a

dipendenti[3].tvisite[2].data

Per verificare che non mi sia confuso consulta la documentazione della  
classe Associations nella sezione “eager loading”:

> **[ActiveRecord::Associations::ClassMethods](https://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html)**
>
> Associations are a set of macro-like class methods for tying objects together through foreign keys.

Ciao

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [December 15, 2006, 3:03pm UTC](https://www.ruby-forum.com/t/query-left-join/78516/4 "2006-12-15T15:03:36Z")

</div>

Grazie dei suggerimenti,  
sono riuscito a fare il left join … ma ho ancora un piccolo problema:

la QUERY Ã¨ questa:

select dipendenti.prg, dipendenti.codutente, dipendenti.cognome,  
dipendenti.nome, dipendenti.datanascita, aziende.nome  
from aziende left join dipendenti on (aziende.prg=dipendenti.azienda)  
order by dipendenti.cognome, dipendenti.nome

in RUBY diventa:

@azienda = Azienda.find(:all, :select =\> “dipendenti.prg,  
dipendenti.codutente, dipendenti.cognome, dipendenti.nome,  
dipendenti.datanascita, aziende.nome”, :joins =\> “left join dipendenti  
on (aziende.prg=dipendenti.azienda)”, :order =\> “dipendenti.cognome,  
dipendenti.nome” )

il LEFT JOIN funziona, il problema sta nella :select … cosÃ¬ come l’ho  
scritta lancia quest’eccezione:

ActiveRecord::StatementInvalid in AccettazioneController#risultati  
FireRuby::FireRubyException: Error preparing a SQL statement.  
Dynamic SQL Error  
SQL error code = -104  
Token unknown - line 1, column 9  
FROM  
Invalid token  
SQL Code = -104  
Firebird Code = 335544569  
: SELECT FROM aziende left join dipendenti on  
(aziende.prg=dipendenti.azienda)

in pratica non capisce quali colonne prendere in considerazione (SELECT  
FROM ).  
Qual’Ã¨ la sintassi corretta per la ":select =\> "?
