2017-07-20 4 views
0

ich diese Abfrage habe, die fein auf mysql funktioniert und senden Sie das gewünschte Ergebnis, aber sqlx haben Schwierigkeiten, sie zu handhaben:JOIN SQLX Ursachen ‚fehlenden Zielnamen‘ mit

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) 
} 

Zur Laufzeit ich kein Ergebnis erhalten, aber diese Fehlermeldung im Terminal:

fehlt Zielname joke_id

ich dieses Problem nicht haben, wenn eine einzelne Tabelle abzufragen.

Also ich frage mich, was hier falsch ist und wie es zu beheben?

UPDATE: Hier sind die structs:

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

Beinhaltet Ihr 'model.Joke' ein Feld mit einer' db: "joke_id" 'Annotation? – yazgazan

+0

Nein. Es hat nur 'db:" id "' für den Primärschlüssel. Habe gerade die Strukturen hinzugefügt. – Karlom

+1

Dann weiß sqlx nicht, welches Mitglied von 'model.Joke' zu ​​Scan' joke_id'. Sie können entweder ein 'JokeID'-Feld zu' model.Joke' hinzufügen (mit der entsprechenden 'db'-Annotation) oder die Spalten angeben, die Sie manuell in Ihrer Abfrage erhalten möchten (anstelle von' SELECT * '). – yazgazan

Antwort

2

Wenn Sie ausführen "SELECT * FROM Witz INNER JOIN jokevote" Sie beide Spalten aus Witz und jokevote Tabellen bekommen. Versuchen Sie, "SELECT Witz. * FROM Witz INNER JOIN Jokervote" abzufragen, um nur Spalten aus der Witztabelle zu erhalten.

+0

Ja, dieser 'SELECT Witz. * FROM Witz ...' löste das Problem. Vielen Dank! – Karlom