SQL 删除

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

await db.delete(users);

你也可以使用过滤器和条件进行删除:

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

删除并返回

PostgreSQL
SQLite
MySQL

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

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

// partial return
const deletedUserIds: { deletedId: number }[] = await db.delete(users)
  .where(eq(users.name, 'Dan'))
  .returning({ deletedId: users.id });

WITH DELETE 子句

💡

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

使用 with 子句可以通过将复杂查询拆分为称为公共表达式的较小子查询来简化复杂查询:

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"
Become a Gold Sponsor