Прежде всего, согласно моему комментарию: вы используете mysql
только как БД, и все же вы импортируете все пакеты диалектов (которые вызывают их соответствующие функции инициализации. Эти функции регистрируют обратные вызовы, которые являются диалектамиспецифические (например, функция инициализации в пакете MsSQL ). Удалите все диалекты, которые вы не используете, из своих импортов:
// remove lines that I've commented out here...
import (
"github.com/jinzhu/gorm"
// _ "github.com/jinzhu/gorm/dialects/mssql"
_ "github.com/jinzhu/gorm/dialects/mysql"
// _ "github.com/jinzhu/gorm/dialects/postgres"
// _ "github.com/jinzhu/gorm/dialects/sqlite"
)
Вы можете переместить NOT IN
частьWHERE
условие JOIN
на основе документации .
Я также проверил бы любые ошибки, с которыми вы можете столкнуться, они могут дать вам больше отладочной информации поверхжурнал:
err := db.Table("A").Select("A.id,A.age").
Joins("LEFT JOIN B on A.id = B.id AND B.id NOT IN (?)", []int{2, 3, 4, 5}).
Where("age = ?", 28).
Scan(&result).Error
if err != nil {
fmt.Fatalf("Failed to execute query: %+v", err)
}
fmt.Prinln(result)