3 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個贊
我做了一些更改,使我可以無錯誤地運(yùn)行程序,并且無需重命名 db 標(biāo)簽。首先,我在配置文件結(jié)構(gòu)中添加了以下代碼,讓查詢識別人員結(jié)構(gòu)
Person?`db:"person"`
在此之后,我將 SQL 查詢字符串更改為以下代碼
DB.Select(&q,?`select?person.id?"person.id",?person.name?"person.name",?person.email?"person.email",?profile.*?from?profile?left?join?person?on?person.id?=?profile.person_id`)

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個贊
該錯誤是由于id從結(jié)果中返回兩列但將結(jié)果存儲在兩個結(jié)構(gòu)中具有相同字段名稱 id 的結(jié)構(gòu)中,您將其實(shí)例傳遞給 DB.Select。嘗試捕獲單個 id 列并將其傳遞給結(jié)構(gòu)。
傳遞多個列但不同的列名,您可以將其用作別名。列別名將是您在其中掃描數(shù)據(jù)的 Person 結(jié)構(gòu)中的字段:
type Person struct {
PersonId int64 `db:"personId"`
Name string `db:"name"`
Email string `db:"email"`
}
var q []Profile
DB.Select(&q, "select person.id as personId, person.name, person.email, profile.id, profile.face, profile.hair from profile left join person on person.id = profile.person_id")
fmt.Println(q)

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個贊
您需要像下面我描述的那樣更改結(jié)構(gòu)db中的名稱person,因?yàn)闀袃闪芯哂邢嗤拿Q,id即它只掃描profile表中的最后一個 ID 而不是掃描person表,因此請按照下面提到的結(jié)構(gòu)進(jìn)行操作。
type Person struct {
Id int64 `db:"pId"`
Name string `db:"name"`
Email string `db:"email"`
}
然后用asfor person.idlike寫你的查詢
DB.Select(&q, "select (person.id) as pId, person.name, person.email, profile.id, profile.face, profile.hair from profile left join person on person.id = profile.person_id")
- 3 回答
- 0 關(guān)注
- 162 瀏覽
添加回答
舉報