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 クエリパターンを示しています。