在gorm的'FROM'中使用子查询

Sun*_*Cho 5 go go-gorm

我想知道如何使用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)


Jin*_*zhu 3

您可以使用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')));

  • `QueryExpr` 返回 `*expr`。关于如何将该值插入“FROM”有什么建议吗?此外,该链接不起作用,因为文档中没有“子查询”部分。 (4认同)