Update
Bob を使用した SQLite の UPDATE クエリの例を示します。
基本的な UPDATE
UPDATE users SET name = ?, updated_at = ? WHERE id = ?
sqlite.Update("users").
Set("name", sqlite.Arg("Updated Name")).
Set("updated_at", sqlite.Arg(time.Now())).
Where(sqlite.Quote("id").EQ(sqlite.Arg(1)))
複数条件での UPDATE
UPDATE users SET active = ?
WHERE created_at < ? AND last_login IS NULL
sqlite.Update("users").
Set("active", sqlite.Arg(false)).
Where(
sqlite.Quote("created_at").LT(sqlite.Arg(time.Now().AddDate(0, -6, 0))),
sqlite.Quote("last_login").IsNull(),
)
JOIN を使用した UPDATE
UPDATE users SET status = ?
FROM user_profiles
WHERE users.id = user_profiles.user_id
AND user_profiles.verified = ?
sqlite.Update("users").
Set("status", sqlite.Arg("verified")).
From("user_profiles").
Where(
sqlite.Quote("users", "id").EQ(sqlite.Quote("user_profiles", "user_id")),
sqlite.Quote("user_profiles", "verified").EQ(sqlite.Arg(true)),
)
計算式を使用した UPDATE
UPDATE products SET price = price * ?
WHERE category = ?
sqlite.Update("products").
Set("price", sqlite.Quote("price").Mul(sqlite.Arg(1.1))).
Where(sqlite.Quote("category").EQ(sqlite.Arg("electronics")))
JSON フィールドの UPDATE
UPDATE users SET metadata = JSON_SET(metadata, '$.last_login', ?)
WHERE id = ?
sqlite.Update("users").
Set("metadata", sqlite.F("JSON_SET",
sqlite.Quote("metadata"),
sqlite.Arg("$.last_login"),
sqlite.Arg(time.Now().Format(time.RFC3339)))).
Where(sqlite.Quote("id").EQ(sqlite.Arg(1)))
CASE 文を使用した UPDATE
UPDATE users SET status =
CASE
WHEN last_login > ? THEN 'active'
WHEN last_login > ? THEN 'inactive'
ELSE 'dormant'
END
sqlite.Update("users").
Set("status", sqlite.Case().
When(sqlite.Quote("last_login").GT(sqlite.Arg(time.Now().AddDate(0, 0, -30))), sqlite.Arg("active")).
When(sqlite.Quote("last_login").GT(sqlite.Arg(time.Now().AddDate(0, -3, 0))), sqlite.Arg("inactive")).
Else(sqlite.Arg("dormant")))
サブクエリを使用した UPDATE
UPDATE users SET score = (
SELECT AVG(rating) FROM reviews
WHERE reviews.user_id = users.id
)
WHERE id IN (SELECT DISTINCT user_id FROM reviews)
avgRating := sqlite.Select(sqlite.F("AVG", sqlite.Quote("rating"))).
From("reviews").
Where(sqlite.Quote("reviews", "user_id").EQ(sqlite.Quote("users", "id")))
userIds := sqlite.Select(sqlite.F("DISTINCT", sqlite.Quote("user_id"))).
From("reviews")
sqlite.Update("users").
Set("score", avgRating).
Where(sqlite.Quote("id").In(userIds))
LIMIT 付きの UPDATE
UPDATE users SET processed = ?
WHERE processed = ?
ORDER BY created_at ASC
LIMIT ?
sqlite.Update("users").
Set("processed", sqlite.Arg(true)).
Where(sqlite.Quote("processed").EQ(sqlite.Arg(false))).
OrderBy(sqlite.Quote("created_at").Asc()).
Limit(100)
RETURNING 句(SQLite 3.35+)
UPDATE users SET name = ?, updated_at = ?
WHERE id = ?
RETURNING id, name, updated_at
sqlite.Update("users").
Set("name", sqlite.Arg("Updated Name")).
Set("updated_at", sqlite.Arg(time.Now())).
Where(sqlite.Quote("id").EQ(sqlite.Arg(1))).
Returning("id", "name", "updated_at")
条件付き増分
UPDATE counters SET count = count + ? WHERE name = ?
sqlite.Update("counters").
Set("count", sqlite.Quote("count").Plus(sqlite.Arg(1))).
Where(sqlite.Quote("name").EQ(sqlite.Arg("page_views")))
これらの例は、Bob を使用して SQLite で実行可能な様々な UPDATE クエリパターンを示しています。