On this page:
define-alias
let-alias
6.2.8.1 Entity aliases
6.2.8.2 Attribute and expression aliases
6.2.8 Aliases

Aliases are Snooze’s mechanism for letting you to refer to individual instances of an entity or expression within a query.

You can introduce aliases for entities, attributes or expressions using the following forms (see below for examples):

(define-alias id expr)
Introduces an alias for expr using the same scoping rules as define.

(let-alias ([id expr] ...) body-expr ...)
Like define-alias but uses the same scoping rules as let.

6.2.8.1 Entity aliases

It is sometimes necessary to refer to more than one instance of an entity within a query. Snooze lets you do this by defining aliases for entities. For example:

  (define-alias father person)
  
  ; Luke's father:
  (find-one
   (sql (select #:what  father
                #:from  (inner person
                               father
                               (= person.father-id father.id))
                #:where (= person.name "Luke"))))

6.2.8.2 Attribute and expression aliases

It is sometimes useful to assign an alias to an attribute or expression.

For example, if you are #:ordering on an expression, SQL 97 requires you to add the same expression to your #:what clause. The only way to do this is to alias the expression:

  ; All people and BMIs, ordered by BMI:
  (let-alias ([bmi (/ person.weight person.height)])
    (find-all
     (sql (select #:what  (person bmi)
                  #:from  person
                  #:order ((asc bmi))))))