sql >> Database >  >> RDS >> PostgreSQL

ActiveRecord genest SELECT

Waarom voeg je samen in plaats van te selecteren op voor- en achternaam? De subselect zal veel minder presteren dan directe query. Je zou de volledige naam kunnen krijgen met de select scope (het zal op dezelfde manier toegankelijk zijn als andere attributen):

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

Bijwerken: Als je de bovenstaande query echt moet herschrijven met een subselect in de FROM clausule toe aan ActiveRecord, kunt u het volgende doen:

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

D.w.z. in het algemeen kunt u elke geldige SQL in de ActiveRecord-scope-methoden plaatsen, inclusief select , from , enz.



  1. Hoe deze IP-naar-Locatie-opzoekquery optimaliseren?

  2. Meerdere waarden van een kolom in één rij weergeven (SQL Oracle)

  3. UPDATE .. LIMIT 1 met SqlAlchemy en PostgreSQL

  4. Herhaalde gegevens in een kolom verwijderen