我想知道如何使用gorm在FROM子句中使用子查询。它看起来像下面的样子:
SELECT * FROM
(
SELECT foo.*
FROM foo
WHERE bar = "baz"
) AS t1
WHERE t1.id = 1;
Run Code Online (Sandbox Code Playgroud)
我已经使用golang构建了子查询:
db.Model(Foo{}).Where("bar = ?", "baz")
Run Code Online (Sandbox Code Playgroud)
但是,如何将其用作in中的子查询FROM?
如果有一种方法可以将gorm查询转换为SQL字符串,那么我可以简单地将该字符串插入原始SQL。但是似乎没有这种方法。有什么建议么?
小智 9
您也可以通过子查询的 join 来完成
subQuery := db.
Select("foo.*").
Table("foo").
Where("bar = ?", "baz").
SubQuery()
db.
Select("t1.*").
Join("INNER JOIN ? AS t1 ON t1.id = foo.id", subQuery).
Where("t1.id = ?", 1)
Run Code Online (Sandbox Code Playgroud)
您可以使用QueryExpr,参考
https://gorm.io/docs/advanced_query.html#SubQuery
db.Where("金额 > ?", DB.Table("订单").Select("AVG(金额)").Where("state = ?", "paid").QueryExpr()).Find(&orders )
哪个生成SQL
SELECT * FROM "orders" WHERE "orders"."deleted_at" IS NULL AND (amount > (SELECT AVG(amount) FROM "orders" WHERE (state = 'paid')));