伙计们,我需要你们的帮助。我的脑子坏了,我不知道我做错了什么。我有两张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()
型
目前,我收到的所有数据在所需的日期从表的学生,但即使相同的状态“取消”或“拒绝”是在请求表中,它的没有排除在结果。如果你需要任何额外的信息从我这里来帮助我,只是让我知道。感谢您的任何建议和意见。
1条答案
按热度按时间xjreopfe1#
您需要确保正确应用
WHERE
子句,以排除状态为“cancelled”或“declined”的请求。字符串
我使用了一个
NOT EXISTS
子查询来检查在requests
表中有相同request_id
的请求,并且在status
切片中有一个状态。如果在子查询中找到这样的请求,它们将被排除在最终结果之外。