Join
Learn how to perform SQL joins in tSQL including inner joins, left joins, and complex join conditions with type-safe query building.
Join clauses combine rows from two or more tables based on a related column. Kysely supports inner, left, right, and full joins.
Basic Inner Join
db.selectFrom("users")
.innerJoin("orders", "orders.user_id", "users.id")
.select(["users.id", "orders.total"])
.execute();
Left Join
db.selectFrom("users")
.leftJoin("orders", "orders.user_id", "users.id")
.select(["users.name", (eb) => eb.fn.count("orders.id").as("order_count")])
.groupBy("users.id")
.execute();
Multiple Conditions
db.selectFrom("users")
.innerJoin("orders", (join) =>
join
.onRef("orders.user_id", "=", "users.id")
.on("orders.status", "=", "completed")
)
.select(["users.id", "orders.total"])
.execute();
Subquery Join
db.selectFrom("users")
.innerJoin(
(eb) =>
eb
.selectFrom("orders")
.select(["user_id", "total"])
.where("status", "=", "completed")
.as("recent_orders"),
"recent_orders.user_id",
"users.id"
)
.select(["users.name", "recent_orders.total"])
.execute();
Table Aliases
db.selectFrom("users as u")
.innerJoin("orders as o", "o.user_id", "u.id")
.select(["u.name", "o.total"])
.execute();