Basics

Override: Joins

Join helpers cover standard joins plus Postgres-specific lateral and natural variants.

Join Basics

Use innerJoin, leftJoin, rightJoin,fullJoin, or crossJoin.

const query = q
  .select(q.c("orders.id"), q.c("users.email"))
  .from(q.t("orders"))
  .innerJoin(
    q.t("users"),
    q.eq(q.c("orders.user_id"), q.c("users.id")),
  )

Lateral Join

Lateral joins allow correlated subqueries usingleftJoinLateral and innerJoinLateral.

const query = q
  .select(q.c("users.id"), q.c("events.id"))
  .from(q.t("users"))
  .leftJoinLateral(
    q.sub(
      q.select(q.c("events.id"))
        .from(q.t("events"))
        .where(q.eq(q.c("events.user_id"), q.c("users.id"))),
    ).as(q.c("user_events")),
    q.raw`TRUE`,
  )

Natural Join

Natural join helpers emit NATURAL with the join keyword.

const query = q
  .select(q.c("users.id"), q.c("profiles.bio"))
  .from(q.t("users"))
  .naturalLeftJoin(q.t("profiles"))