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")