Delete
Bob を使用した SQLite の DELETE クエリの例を示します。
基本的な DELETE
DELETE FROM users WHERE id = ?
sqlite.Delete("users").
Where(sqlite.Quote("id").EQ(sqlite.Arg(1)))
複数条件での DELETE
DELETE FROM users
WHERE active = ? AND created_at < ?
sqlite.Delete("users").
Where(
sqlite.Quote("active").EQ(sqlite.Arg(false)),
sqlite.Quote("created_at").LT(sqlite.Arg(time.Now().AddDate(0, -1, 0))),
)
JOIN を使用した DELETE
DELETE FROM users
WHERE id IN (
SELECT u.id FROM users u
JOIN user_profiles p ON u.id = p.user_id
WHERE p.status = ?
)
subquery := sqlite.Select(sqlite.Quote("u", "id")).
From("users").As("u").
Join("user_profiles").As("p").
On(sqlite.Quote("u", "id").EQ(sqlite.Quote("p", "user_id"))).
Where(sqlite.Quote("p", "status").EQ(sqlite.Arg("inactive")))
sqlite.Delete("users").
Where(sqlite.Quote("id").In(subquery))
LIMIT 付きの DELETE
DELETE FROM logs
WHERE created_at < ?
ORDER BY created_at ASC
LIMIT ?
sqlite.Delete("logs").
Where(sqlite.Quote("created_at").LT(sqlite.Arg(time.Now().AddDate(0, -1, 0)))).
OrderBy(sqlite.Quote("created_at").Asc()).
Limit(1000)
IN 句を使用した DELETE
DELETE FROM users WHERE id IN (?, ?, ?)
sqlite.Delete("users").
Where(sqlite.Quote("id").In(sqlite.Arg(1), sqlite.Arg(2), sqlite.Arg(3)))
サブクエリを使用した DELETE
DELETE FROM users
WHERE id IN (
SELECT user_id FROM user_sessions
WHERE last_activity < ?
)
subquery := sqlite.Select("user_id").
From("user_sessions").
Where(sqlite.Quote("last_activity").LT(sqlite.Arg(time.Now().AddDate(0, -1, 0))))
sqlite.Delete("users").
Where(sqlite.Quote("id").In(subquery))
RETURNING 句(SQLite 3.35+)
DELETE FROM users
WHERE id = ?
RETURNING id, name, email
sqlite.Delete("users").
Where(sqlite.Quote("id").EQ(sqlite.Arg(1))).
Returning("id", "name", "email")
条件付きの一括削除
DELETE FROM audit_logs
WHERE created_at < ?
AND level = 'DEBUG'
ORDER BY created_at ASC
LIMIT ?
sqlite.Delete("audit_logs").
Where(
sqlite.Quote("created_at").LT(sqlite.Arg(time.Now().AddDate(0, -3, 0))),
sqlite.Quote("level").EQ(sqlite.Arg("DEBUG")),
).
OrderBy(sqlite.Quote("created_at").Asc()).
Limit(10000)
外部キー制約を考慮した DELETE
PRAGMA foreign_keys = ON;
DELETE FROM users WHERE id = ?
// 外部キー制約を有効にする
sqlite.Raw("PRAGMA foreign_keys = ON")
// 削除実行
sqlite.Delete("users").
Where(sqlite.Quote("id").EQ(sqlite.Arg(1)))
条件に基づく CASCADE 削除
DELETE FROM posts
WHERE user_id IN (
SELECT id FROM users WHERE active = ?
)
inactiveUsers := sqlite.Select("id").
From("users").
Where(sqlite.Quote("active").EQ(sqlite.Arg(false)))
sqlite.Delete("posts").
Where(sqlite.Quote("user_id").In(inactiveUsers))
これらの例は、Bob を使用して SQLite で実行可能な様々な DELETE クエリパターンを示しています。