可以使用
Table()
方法为主表起别名,并在查询语句中使用别名来引用主表。
示例代码如下:
type User struct {
ID uint
Name string
type Order struct {
ID uint
UserID uint
Amount float64
Paid bool
func main() {
db, err := gorm.Open("mysql", "user:password@tcp(localhost:3306)/database")
if err != nil {
panic(err)
defer db.Close()
db.AutoMigrate(&User{}, &Order{})
// 给主表 User 起别名 u
db.Table("users").Select("u.name, o.amount").Joins("JOIN orders o ON u.id = o.user_id").Where("o.paid = ?", true).Scan(&result)
// 使用别名 u 引用主表
var result []struct {
Name string
Amount float64
db.Table("users u").Select("u.name, o.amount").Joins("JOIN orders o ON u.id = o.user_id").Where("o.paid = ?", true).Scan(&result)