首页 文章

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

提问于
浏览
4

我想知道如何使用gorm在FROM子句中使用子查询 . 它看起来如下:

SELECT * FROM 
(
  SELECT foo.*
  FROM foo
  WHERE bar = "baz"
) AS t1
WHERE t1.id = 1;

我使用golang构建了子查询:

db.Model(Foo{}).Where("bar = ?", "baz")

但是如何在 FROM 中将其用作子查询?

如果有一种方法可以将一个gorm查询转换为一个SQL字符串,那么我只需将该字符串插入一个原始SQL即可 . 但似乎没有这样的方法 . 有什么建议?

2 回答

  • 3

    您可以使用 QueryExpr ,参考

    http://jinzhu.me/gorm/crud.html#subquery

    db.Where(“amount>?”,DB.Table(“orders”) . 选择(“AVG(金额)”) . 其中(“state =?”,“paid”) . QueryExpr()) . Find( &命令)

    哪个生成SQL

    SELECT * FROM“orders”WHERE“orders” . “deleted_at”IS NULL AND(amount>(SELECT AVG(amount)FROM“orders”WHERE(state ='paid')));

  • 0

    你也可以在子查询上加入

    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)
    

相关问题