2017-07-20 22 views
0

我有這個疑問,關於MySQL的正常工作,並返回預期的結果,但是sqlx有困難作出處理:JOIN使用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

查詢一個表的時候,我沒有這個問題。

所以我想知道這裏有什麼問題,以及如何解決它?

UPDATE:這裏有結構:

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"` 
} 
+0

您的'model.Joke'包含一個帶有'db:「joke_id」'註解的字段嗎? – yazgazan

+0

不,它只有主數據庫的「db:」id「'。剛剛添加了結構。 – Karlom

+1

然後,sqlx不知道'model.Joke'的哪個成員要掃描'joke_id'。您可以將'JokeID'字段添加到'model.Joke'(使用適當的'db'註釋),或者在查詢中指定要手動返回的列(而不是'SELECT *')。 – yazgazan

回答

2

當你執行 「SELECT * FROM笑話INNER JOIN jokevote」 你會得到來自兩個笑話,jokevote表中的列。 嘗試查詢「SELECT joke。* FROM joke INNER JOIN jokevote」以僅獲取來自笑話表的列。

+0

是的,這個'SELECT笑話。* FROM笑話...'解決了這個問題。謝謝! – Karlom