当提供的值不是空字符串时更新MariaDB列

时间:2017-01-14 05:57:55

标签: mysql sql go mariadb

我目前正在开发一个与MariaDB数据库对话的Golang应用程序。我的服务将采用*User并尝试更新匹配记录。

例如:

func (d *database) UpdateUser(user *User) error {
    stmt, err := d.Prepare(`UPDATE Users
        SET FirstName=?, LastName=?, Email=?, Address1=?, Address2=?,
            City=?, State=?, Country=?, PostalCode=?
        WHERE Id=?`)
    if err != nil {
        return err
    }

    _, err := res, err := stmt.Exec(user.FirstName, user.LastName, user.Email,
        user.Address1, user.Address2, user.City, user.State, user.Country, 
        user.PostalCode, user.Id)
    return err
}

但是,我不想更新未提供的字段。我正在寻找更接近这个的东西,如果提供的是一个空字符串,它将不会更新值:

`UPDATE Users
 SET FirstName=? OR FirstName, LastName=? OR LastName, Email=? OR Email, 
     Address1=? OR Address1, Address2=? OR Address2, City=? OR City, 
     State=? OR State, Country=? OR Country, PostalCode=? OR PostalCode
 WHERE Id=?`

我已经看到SQL允许使用CASE语句进行更新,但是我没有看到使用它的方法,而没有多次向Exec()提供相同的变量。

1 个答案:

答案 0 :(得分:2)

喜欢这个

UPDATE Users
SET FirstName = case when ? is null then FirstName else ? end

或仅传递一次参数

UPDATE Users
SET FirstName = coalesce(?, FirstName)