如何创建检查数组是否包含值的查询?

这是模型的外观:


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 列中的样子:

http://img3.mukewang.com/634d3c510001feec01760143.jpg

以及如何进行查询以检查贡献者数组是否包含例如 20?我试图这样做:database.DB.Where("contributors IN ?", 20).Find(&contBoards) 但出现错误:ERROR: syntax error at or near "$1" (SQLSTATE 42601)

请任何想法,任何选择。PS 使用 gorm、postgresql


墨色风雨
浏览 133回答 1
1回答

侃侃尔雅

您IN在WHERE子句中使用运算符来检查值是否与值列表中的任何值匹配。IN需要一个明确的值列表(或子查询)。我为您的案例创建了一个示例场景,如下所示:contributors := []int{20, 25, 27}var tmp []stringfor _, v := range contributors {    tmp = append(tmp, fmt.Sprint(v))}query := "SELECT * from table_name where contributors in (" + strings.Join(tmp, ",") + ")"或者ANY适用于数组。如果数组中已有值列表,这将很有用。使用ANY运算符,您只能搜索一个值。select * from table_name where value = ANY(contributors);如果要搜索多个值,可以使用@>运算符。@>是“包含”运算符。为几种数据类型定义如下:数组:http ://www.postgresql.org/docs/current/static/functions-array.html范围类型:http ://www.postgresql.org/docs/current/static/functions-range.html几何类型:http ://www.postgresql.org/docs/current/static/functions-geometry.htmlJSON(和 JSONB):http ://www.postgresql.org/docs/current/static/functions-json.html
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go