Go语言 需要从第二个表中排除存在于第一个表中的id

gkn4icbw  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(84)

伙计们,我需要你们的帮助。我的脑子坏了,我不知道我做错了什么。我有两张table

Requests
ID string `json:"id"`
UserID string `json:"user_id"`
Status string `json:"status"`

个字符
作为一个接收者,我有一个用户ID,我需要找到所有用户的请求之间的开始和结束日期,但应排除状态为“取消”或“拒绝”的请求。我以为我可以使用左加入,但它不工作,因为我需要。目前我有以下查询:

status := []string{"canceled", declined"}

   type Result struct {
      tableName        struct{}  `pg:"students"`
      ID               string `json:"id"`
      UserID      int       `json:"user_id"`
      RequestID string    `pg:"fk:request_id"`
      Status           string    `json:"status"`
   }

   var res []Result

    err := Model(&res).
      ColumnExpr("id, user_id, requests.status").
      Where("user_id = ?", UseID).
      Where("start_date >= ? AND end_date <= ?", startDate, endDate).
      Join("LEFT JOIN requests ON requests.id = request_id").
      WhereIn("requests.status IN (?)", status).
      Select()


目前,我收到的所有数据在所需的日期从表的学生,但即使相同的状态“取消”或“拒绝”是在请求表中,它的没有排除在结果。如果你需要任何额外的信息从我这里来帮助我,只是让我知道。感谢您的任何建议和意见。

xjreopfe

xjreopfe1#

您需要确保正确应用WHERE子句,以排除状态为“cancelled”或“declined”的请求。

type Result struct {
    TableName  struct{}  `pg:"students"`
    ID         string    `json:"id"`
    UserID     string    `json:"user_id"`
    RequestID  string    `pg:"fk:request_id"`
    Status     string    `json:"status"`
}

var res []Result
status := []string{"canceled", "declined"}

err := Model(&res).
    ColumnExpr("students.id, students.user_id, students.request_id, requests.status").
    Where("students.user_id = ?", UserID).
    Where("students.start_date >= ? AND students.end_date <= ?", startDate, endDate).
    Where("NOT EXISTS (SELECT 1 FROM requests WHERE students.request_id = requests.id AND requests.status IN (?))", status).
    Select()

字符串
我使用了一个NOT EXISTS子查询来检查在requests表中有相同request_id的请求,并且在status切片中有一个状态。如果在子查询中找到这样的请求,它们将被排除在最终结果之外。

相关问题