【问题标题】:JOIN using sqlx causes 'missing destination name'使用 sqlx 加入会导致“缺少目标名称”
【发布时间】:2017-07-20 22:24:36
【问题描述】:

我有这个在 mysql 上运行良好并返回预期结果的查询,但 sqlx 处理起来有困难:

var jokes []model.Joke
err := shared.Dbmap.Select(&jokes, "SELECT * FROM joke INNER JOIN jokevote ON joke.id=jokevote.joke_id AND jokevote.vote=? AND joke.user_id=?", 1, userId)
if err != nil {
    log.Println(err)
}

在运行时,我没有得到任何结果,但终端中出现此错误消息:

缺少目的地名称joke_id

查询单个表时没有这个问题。

所以我想知道这里出了什么问题以及如何解决它?

更新:以下是结构:

type Joke struct {
    ID         int       `db:"id" json:"id"`
    UserID     int       `db:"user_id" json:"user_id"`
    Title      string    `db:"title" json:"title"`
    Content    string    `db:"content" json:"content"`

...
}

type JokeVote struct {
    ID     int `db:"id" json:"id"`
    JokeID int `db:"joke_id" json:"joke_id"`
    UserID int `db:"user_id" json:"user_id"`
    Vote   int `db:"vote" json:"vote"`
}

【问题讨论】:

  • 您的model.Joke 是否包含带有db:"joke_id" 注释的字段?
  • 没有。它只有db:"id" 作为主键。刚刚添加了结构。
  • 那么sqlx不知道在model.Joke的哪个成员上扫描joke_id。您可以将JokeID 字段添加到model.Joke(使用适当的db 注释),或者在查询中手动指定要返回的列(而不是SELECT *)。

标签: go sqlx


【解决方案1】:

当您执行“SELECT * FROM joke INNER JOIN jokevote”时,您将获得来自 jokevote 表和 jokevote 表的列。 尝试查询“SELECT笑话。* FROM joke INNER JOIN jokevote”以仅从笑话表中获取列。

【讨论】:

  • 是的,这个SELECT joke.* FROM joke ... 解决了这个问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-10-18
  • 2018-07-24
  • 2020-10-31
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
相关资源
最近更新 更多