2017-10-18 5 views
3

Je voudrais savoir comment je peux utiliser une sous-requête dans la clause FROM en utilisant gorm. Il ressemblerait à ce qui suit:Utilisation d'une sous-requête dans 'FROM' dans gorm

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

J'ai construit la sous-requête en utilisant golang:

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

Mais comment puis-je utiliser cela comme une sous-requête dans FROM?

S'il existe une méthode qui transforme une requête de type gorm en une chaîne SQL, je peux simplement insérer cette chaîne dans un SQL brut. Mais il ne semble pas y avoir une telle méthode. Aucune suggestion?

Répondre

2

Vous pouvez utiliser QueryExpr, reportez-vous

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

db.Where ("montant>?", DB.Table ("ordres"). Sélectionner ("AVG (montant)") .Lorsque ("state =?", "payé"). QueryExpr()). Trouver (& commandes)

qui génèrent SQL

SELECT * FROM "commandes" WHERE "commandes". "Deleted_at" IS NULL ET (montant> (SELECT AVG (montant) FROM "orders" WHERE (state = 'paid')));

+1

'QueryExpr' renvoie' * expr'. Des suggestions sur la façon de brancher cette valeur dans 'FROM'? En outre, le lien ne fonctionne pas car il n'y a pas de section 'subquery' dans le document. –