SQL 删除

你可以删除表中的所有行:

await db.delete(users);

你也可以使用筛选条件进行删除:

await db.delete(users).where(eq(users.name, 'Dan'));

返回

在 PostgreSQL 中,你可以删除一行并将其取回:

const deletedUser = await db.delete(users)
  .where(eq(users.name, 'Dan'))
  .returning();

// 部分返回
const deletedUserId = await db.delete(users)
  .where(eq(users.name, "Dan"))
  .returning({ deletedId: users.id });

// deletedUserId: { deletedId: number | null }[]
delete from "users" where "users"."name" = 'Dan' returning "id", "name";

delete from "users" where "users"."name" = 'Dan' returning "id";

WITH DELETE 子句

查看如何在 selectinsertupdate 中使用 WITH 语句

使用 with 子句可以通过将复杂查询拆分为更小的子查询(称为公共表表达式,CTE)来帮助你简化它们:

const averageAmount = db.$with('average_amount').as(
  db.select({ value: sql`avg(${orders.amount})`.as('value') }).from(orders)
);

const result = await db
	.with(averageAmount)
	.delete(orders)
	.where(gt(orders.amount, sql`(select * from ${averageAmount})`))
	.returning({
		id: orders.id
	});
with "average_amount" as (select avg("amount") as "value" from "orders") 
delete from "orders" 
where "orders"."amount" > (select * from "average_amount") 
returning "id"