php小編新一在這裡為大家介紹SQL中的COALESCE函式。 COALESCE函數用於傳回參數清單中的第一個非NULL值。然而,需要注意的是,在使用GORM(Go語言的ORM框架)時,COALESCE函數可能會出現一些問題。這是因為GORM對於查詢語句的處理方式與傳統的SQL語句不同。因此,如果你在使用GORM時遇到了COALESCE函數的問題,可能需要考慮其他的解決方案。
db.model(&domain.products{}).where("product_code", product.product_code). updates(map\[string\]interface{}{ "product_image": gorm.expr("coalesce(?, products.product_image)", product.product_image), "size": gorm.expr("coalesce(?, products.size)", product.size), "color": gorm.expr("coalesce(?, products.color)", product.color), "unit_price": gorm.expr("coalesce(?, products.unit_price)", product.unit_price), "stock": gorm.expr("coalesce(?, products.stock)", product.stock), })
這是一個 gorm 查詢,用於在我們更新表時管理空值插入。 如果新值(傳入值)為空,我想透過保留表中的現有值來更新表。 但在我的程式碼中,表正常更新,這意味著空值和非空值都正常更新。我希望有人能幫我
我也嘗試過 gorm 原始查詢。但它也不起作用
ar.DB.Exec("UPDATE products SET size = COALESCE(?, size) WHERE product_code = ?", product.Size, product.Product_Code)
coalesce 傳回第一個不是 nil
的參數。
為此,您需要提供指標。但是,正如從評論中的程式碼片段中看到的那樣,沒有提供任何指標。因此,所有指定欄位都將被更新。
具體來說,您的 products
(或在您的程式中呼叫的任何名稱)類型應該看起來更像這樣:
package domain type products struct { product_code int `gorm:"not null"` product_image *string size *int color *string unit_price *float64 stock *int }
請注意,欄位被定義為指標。
然後它會這樣使用:
newStock := 12 prod := domain.Products{ product_code: 42, product_image: nil, size: nil, color: nil, unit_price: nil, stock: &newStock, }
正弦所有欄位都是 nil
,除了 stock
之外,只有 stock
會在資料庫中更新。
以上是SQL COALESCE 函數不適用於 GORM的詳細內容。更多資訊請關注PHP中文網其他相關文章!