在 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 相同。

谢谢你:)