我有一个结构Person:
type Person struct {
Id int64
Name string
Colors []string
}
它应该从person表中获取其数据:
id | name
---------
1 | Joe
2 | Moe
和一张person_color桌子:
person_id | color
-----------------
1 | black
1 | blue
2 | green
通过SELECT p.id, p.name, pc.color FROM person AS p INNER JOIN person_color AS pc ON pc.person_id = p.id我将两个表合并到:
id | name | color
-----------------
1 | Joe | black
1 | Joe | blue
2 | Moe | green
目前我唯一能想到的就是在迭代时手动映射颜色rows.Next()(注意:只是虚拟代码):
ps := make([]People, 0)
rows, err := db.Query("SELECT ...")
for rows.Next() {
var p Person
err := rows.Scan(&p.Id, &p.Name, &p.Color[0])
exists := false
for _, ps := range ps {
if ps.Id == p {
exists = true
ps.Color = append(ps.Color, p.Color)
}
}
if !exists {
ps = append(ps, p)
}
}
尽管这可行,但这很烦人,因为映射到切片字段是一种常见操作。
有什么方法可以使用sql或sqlx在所有切片字段上使上述通用?
相关分类