为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
墨色风雨 2022-10-17 19:27:55
这是模型的外观: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
查看完整描述

1 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

您IN在WHERE子句中使用运算符来检查值是否与值列表中的任何值匹配。


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


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信