WITH λ¬Έμ select, insert, updateμ ν¨κ» μ¬μ©νλ λ°©λ²μ νμΈνμΈμ
SQL Delete
ν μ΄λΈμ λͺ¨λ νμ μμ ν μ μμ΅λλ€:
await db.delete(users);νν°μ 쑰건μ μ¬μ©νμ¬ μμ ν μλ μμ΅λλ€:
await db.delete(users).where(eq(users.name, 'Dan'));Limit
PostgreSQL
MySQL
SQLite
SingleStore
.limit()μ μ¬μ©νμ¬ μΏΌλ¦¬μ limit μ μ μΆκ°ν©λλ€ - μλ₯Ό λ€μ΄:
await db.delete(users).where(eq(users.name, 'Dan')).limit(2);delete from "users" where "users"."name" = $1 limit $2;Order By
.orderBy()λ₯Ό μ¬μ©νμ¬ μΏΌλ¦¬μ order by μ μ μΆκ°νκ³ , μ§μ λ νλλ‘ κ²°κ³Όλ₯Ό μ λ ¬ν©λλ€:
import { asc, desc } from 'drizzle-orm';
await db.delete(users).where(eq(users.name, 'Dan')).orderBy(users.name);
await db.delete(users).where(eq(users.name, 'Dan')).orderBy(desc(users.name));
// μ¬λ¬ νλλ‘ μ λ ¬
await db.delete(users).where(eq(users.name, 'Dan')).orderBy(users.name, users.name2);
await db.delete(users).where(eq(users.name, 'Dan')).orderBy(asc(users.name), desc(users.name2));delete from "users" where "users"."name" = $1 order by "name";
delete from "users" where "users"."name" = $1 order by "name" desc;
delete from "users" where "users"."name" = $1 order by "name", "name2";
delete from "users" where "users"."name" = $1 order by "name" asc, "name2" desc;Delete with return
PostgreSQL
SQLite
MySQL
SingleStore
PostgreSQLκ³Ό SQLiteμμλ νμ μμ νκ³ λ°νλ°μ μ μμ΅λλ€:
const deletedUser = await db.delete(users)
.where(eq(users.name, 'Dan'))
.returning();
// λΆλΆ λ°ν
const deletedUserIds: { deletedId: number }[] = await db.delete(users)
.where(eq(users.name, 'Dan'))
.returning({ deletedId: users.id });WITH DELETE μ
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"