PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

ActiveRecord nidificato SELECT

Perché concateni invece di selezionare in base al nome e al cognome? La sottoselezione sarà molto meno performante della query diretta. Puoi ottenere il nome completo usando il select scope (sarà accessibile allo stesso modo degli altri attributi):

 Candidate.select("candidates.*, (first_name || ' ' || last_name) AS full_name").
           where(first_name: 'Antonov', last_name: 'Kolganov')

Aggiornamento: Se hai davvero bisogno di riscrivere la query di cui sopra con una sottoselezione nel FROM clausola su ActiveRecord, puoi fare quanto segue:

Candidate.from("(SELECT (candidates.first_name || ' ' || candidates.last_name) AS full_name, candidates.* FROM candidates) candidates").
          where(full_name: 'Anton Kolganov')

Cioè, in generale, puoi inserire qualsiasi SQL valido nei metodi dell'ambito di ActiveRecord, incluso select , from , ecc.