Golang 合并 PostgreSQL MySQL
API
要查看支持方法的完整列表,请参阅 MergeQuery.
db.NewMerge().
Model(&strct).
Model(&slice).
Table("table1", "table2"). // quotes table names
TableExpr("table1 AS t1"). // arbitrary unsafe expression
TableExpr("(?) AS alias", subquery).
ModelTableExpr("table1 AS t1"). // overrides model table name
On(expr string, args ...any).
When(expr string, args ...any).
WhenInsert(expr string, func(q *bun.InsertQuery) *bun.InsertQuery).
WhenUpdate(expr string, func(q *bun.UpdateQuery) *bun.UpdateQuery).
WhenDelete(expr string).
示例
要为 MSSQL RDMBS 创建一个 MERGE
查询
type Model struct {
ID int64 `bun:",pk,autoincrement"`
Name string
Value string
}
newModels := []*Model{
{Name: "A", Value: "world"},
{Name: "B", Value: "test"},
}
return db.NewMerge().
Model(new(Model)).
With("_data", db.NewValues(&newModels)).
Using("_data").
On("?TableAlias.name = _data.name").
WhenUpdate("MATCHED", func(q *bun.UpdateQuery) *bun.UpdateQuery {
return q.Set("value = _data.value")
}).
WhenInsert("NOT MATCHED", func(q *bun.InsertQuery) *bun.InsertQuery {
return q.Value("name", "_data.name").Value("value", "_data.value")
}).
Returning("$action")