簡體   English   中英

如何創建檢查數組是否包含值的查詢? 戈朗戈姆

[英]How to create query that checks if array contains value? golang gorm

這是 model 的外觀:

type Board struct {
    Id     uint `gorm:"primaryKey;autoIncrement;unique" json:"id"`
    Owner  uint `json:"owner"`
    Name string `json:"name"`
    Contributors datatypes.JSON `gorm:"type:jsonb" json:"contributors"`
    GeneratedLink string `gorm:"default:''" json:"generated_link"`
    Todos datatypes.JSON `gorm:"type:jsonb" json:"todos"`
}

這是 postgresql 列中貢獻者值的樣子:

圖片

以及如何進行查詢以檢查貢獻者數組是否包含例如 20? 我嘗試這樣做: database.DB.Where("contributors IN?", 20).Find(&contBoards)但出現錯誤: ERROR: syntax error at or near "$1" (SQLSTATE 42601)

請任何想法,任何選擇。 PS使用gorm,postgresql

WHERE子句中使用IN運算符來檢查值是否與值列表中的任何值匹配。

IN需要一個明確的值列表(或子查詢)。

我為您的案例創建了一個示例場景,如下所示:

contributors := []int{20, 25, 27}

var tmp []string

for _, v := range contributors {
    tmp = append(tmp, fmt.Sprint(v))
}

query := "SELECT * from table_name where contributors in (" + strings.Join(tmp, ",") + ")"

或者

ANY適用於 arrays。 如果數組中已有值列表,這將很有用。

使用ANY運算符,您只能搜索一個值。

select * from table_name where value = ANY(contributors);

如果要搜索多個值,可以使用@>運算符。

@>是“包含”運算符。

為幾種數據類型定義如下:

arrays: http://www.postgresql.org/docs/current/static/functions-array.ZFC35FDC70D52C69D5236

范圍類型: http://www.postgresql.org/docs/current/static/functions-range.html

幾何類型: http://www.postgresql.org/docs/current/static/functions-geometry.html

JSON(和JSONB): http://www.postgresql.org/docs/current/static/functions-json.ZFC69A239EZ30D25

為了更好地理解,您可以參考此鏈接: Postgres:檢查數組字段是否包含值?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM