0

我将 Go 1.17 与 Sqlx 一起使用,但我不明白如何正确加入我的表。

这是我的结构(我的加入不是逻辑我只是用 sqlx 测试关节)

表专辑:

package album

import ".../api/v1/movie"

type Album struct {
    ID      string  `json:"id"`
    Title   string  `json:"title"`
    Artist  string  `json:"artist"`
    Price   float64 `json:"price"`
    MovieId int     `json:"movie_id" db:"movie_id"`
    movie.Movie
}

表电影:

package movie

type Movie struct {
    ID         string `json:"id"`
    Year       uint16 `json:"year"`
    RentNumber uint32 `json:"rent_number" db:"rent_number"`
    Title      string `json:"title"`
    Author     string `json:"author"`
    Editor     string `json:"editor"`
    Index      string `json:"index"`
    Bib        string `json:"bib"`
    Ref        string `json:"ref"`
    Cat1       string `json:"cat_1" db:"cat_1"`
    Cat2       string `json:"cat_2" db:"cat_2"`
}

这就是我加入的方式:

albums := []Album{}
r.db.Select(&albums, "SELECT * FROM album a INNER JOIN movie m ON (m.id=a.movie_id)")

问题是这两个表具有相同的id字段,因此专辑id被电影 ID 覆盖,我丢失了它。

我该怎么做才能忽略电影id字段(因为我在字段中得到它并为专辑movie_id保留字段?idid

4

1 回答 1

1

您可以为您的 id 字段之一指定id标签,例如:

type Album struct {
    ID      string  `json:"id" id:"album_id"`
    Title   string  `json:"title"`
    Artist  string  `json:"artist"`
    Price   float64 `json:"price"`
    movie.Movie
}

然后进行查询,将id字段别名为album_id喜欢:

SELECT movie.id as id, album.id as album_id, ... FROM album ...

请记住,您现在还需要在命名查询中使用此列名。

于 2021-11-15T18:07:13.540 回答