如何创建检查数组是否包含值的查询?戈朗戈姆
How to create query that checks if array contains value? golang gorm
模型是这样的:
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 "" (SQLSTATE 42601)
请提出任何想法,任何选项。
P.S 使用 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
适用于数组。如果数组中已有值列表,这会很有用。
使用 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.html
JSON(和JSONB):http://www.postgresql.org/docs/current/static/functions-json.html
为了更好地理解你可以参考这个link:
模型是这样的:
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 "" (SQLSTATE 42601)
请提出任何想法,任何选项。 P.S 使用 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
适用于数组。如果数组中已有值列表,这会很有用。
使用 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.html
JSON(和JSONB):http://www.postgresql.org/docs/current/static/functions-json.html
为了更好地理解你可以参考这个link: