PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

ActiveRecord imbriqué SELECT

Pourquoi concaténez-vous au lieu de sélectionner en fonction du prénom et du nom ? La sous-sélection sera beaucoup moins performante que la requête directe. Vous pouvez obtenir le nom complet en utilisant le select scope (il sera accessible de la même manière que les autres attributs) :

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

Mise à jour : Si vous avez vraiment besoin de réécrire la requête ci-dessus avec une sous-sélection dans le FROM clause à ActiveRecord, vous pouvez faire ce qui suit :

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

C'est-à-dire qu'en général, vous pouvez mettre n'importe quel SQL valide dans les méthodes de portée ActiveRecord, y compris select , from , etc.