在 Select 中使用子查询
Use SubQuery in Select
有什么方法可以使用Select中的SubQuery函数吗??我已将其视为 Where 子句的一部分,但我需要 select.
我正在临时解决这个问题:
func GetUserProviders(userID int) ([]userprovider, error) {
providers := []userprovider{}
query := `SELECT (count(users_providers.user_id) > 0)
FROM users_providers
WHERE users_providers.user_id = '` + strconv.Itoa(userID) + `' AND users_providers.provider_id=providers.id`
rows, err := db.DB.Table("providers").
Select("providers.id, providers.name, (" + query + ") as checked").Rows()
if err == nil {
for rows.Next() {
var provider = userprovider{}
db.DB.ScanRows(rows, &provider)
providers = append(providers, provider)
}
}
return providers, err
}
但如果可能的话,我更愿意使用 ORM 的功能而不是连接字符串。
在这种情况下没有危险,但对于其他情况,如果有什么函数可以转换就好了
// SQL expression
type expr struct {
expr string
args []interface{}
}
进入经过清理的字符串。
提前致谢。
好的...我找到了解决方案:
q := db.DB.Table("users_providers").
Select("(count(users_providers.user_id) > 0)").
Where("users_providers.user_id = ? AND users_providers.provider_id=providers.id", userID).
SubQuery()
rows, err := db.DB.Table("providers").
Select("providers.id, providers.name, ? as checked", q).
Rows()
Select 函数接受 2 个参数:一个用于查询,另一个用于参数,工作方式与 Where 相同。
谢谢你:)
有什么方法可以使用Select中的SubQuery函数吗??我已将其视为 Where 子句的一部分,但我需要 select.
我正在临时解决这个问题:
func GetUserProviders(userID int) ([]userprovider, error) {
providers := []userprovider{}
query := `SELECT (count(users_providers.user_id) > 0)
FROM users_providers
WHERE users_providers.user_id = '` + strconv.Itoa(userID) + `' AND users_providers.provider_id=providers.id`
rows, err := db.DB.Table("providers").
Select("providers.id, providers.name, (" + query + ") as checked").Rows()
if err == nil {
for rows.Next() {
var provider = userprovider{}
db.DB.ScanRows(rows, &provider)
providers = append(providers, provider)
}
}
return providers, err
}
但如果可能的话,我更愿意使用 ORM 的功能而不是连接字符串。
在这种情况下没有危险,但对于其他情况,如果有什么函数可以转换就好了
// SQL expression
type expr struct {
expr string
args []interface{}
}
进入经过清理的字符串。
提前致谢。
好的...我找到了解决方案:
q := db.DB.Table("users_providers").
Select("(count(users_providers.user_id) > 0)").
Where("users_providers.user_id = ? AND users_providers.provider_id=providers.id", userID).
SubQuery()
rows, err := db.DB.Table("providers").
Select("providers.id, providers.name, ? as checked", q).
Rows()
Select 函数接受 2 个参数:一个用于查询,另一个用于参数,工作方式与 Where 相同。
谢谢你:)