为了账号安全,请及时绑定邮箱和手机立即绑定

Not() 属于错误的表

Not() 属于错误的表

Go
森栏 2023-04-04 17:05:28
我正在使用 go 版本 go1.10.3 linux/amd64 和 mysql 5.7。需要使用 GORM 的 docker compose config 运行,或者请提供您的配置。package mainimport (    "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")var db *gorm.DBfunc init() {    var err error     db, err = gorm.Open("mysql", "gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&parseTime=True")    if err != nil {        panic(err)    }    db.LogMode(true)}type Res {    Id int  `gorm:"column:id"`    age int  `gorm:"column:age"`}func main() {        var result []Res    db.Table("A").Select("A.id,A.age").Joins("left join B on A.id=B.id").        Where("A.age=28").       Not("B.id", []{2,3,4,5}).       Scan(&result)       fmt.Printf("%v", result)}sql日志是:select A.id,A.age from A left join B on A.id=B.id where a.age=28 and ABid not in(2,3,4,5)可以看出,对表A( A.B.id not in ...)追加了not操作。如何将其附加到表 B ( B.id not in ...)?
查看完整描述

2 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

首先,根据我的评论:您仅用作mysql数据库,但您正在导入所有方言包(它们确实调用了它们各自的 init 函数。这些函数注册了特定于方言的回调(例如 init func在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的一部分移至基于文档的条件。WHEREJOIN


我还会检查您可能遇到的任何错误,它们可能会在日志顶部为您提供更多调试信息:


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)


查看完整回答
反对 回复 2023-04-04
?
三国纷争

TA贡献1804条经验 获得超7个赞

解决

使用

Where("B.id not in(?)", [] {2,3,4,5}) instead of Not()

有人有更好的主意吗?



查看完整回答
反对 回复 2023-04-04
  • 2 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信