J'ai besoin de générer des requêtes SQL en utilisant Arel avec le formulaireComment puis-je générer une sélection à partir d'une table d'alias dans Arel?
SELECT c2.user_id, MAX(c2.created_at) as max_created_at
FROM comments AS c2
GROUP BY c2.user_id
à utiliser comme sous-requête dans une requête plus
SELECT *
FROM comments
INNER JOIN (...subquery...) s1
ON comments.user_id = s1.user_id
AND comments.created_at = s1.max_created_at
et je ne peux pas comprendre comment alias la table comments
dans la sous-requête.
Le plus proche que je peux obtenir est
c2 = Comment.arel_table.alias
s1 = Comment.arel_table.project(
c2[:user_id], c2[:created_at].maximum.as('max_created_at')
).group('user_id').as('s1')
mais cela génère le SQL incorrect
SELECT c2.user_id, MAX(c2.created_at) as max_created_at
FROM comments
GROUP BY c2.user_id
(erreurs parce que c2 n'est pas défini)
Génération de la requête sans aliasing conduit à résultats incorrects que les noms de table à l'intérieur et à l'extérieur de la sous-requête entrent en collision.
Ceci donne l'erreur que Arel::TableAlias
a à la méthode project
.
s1 = c2.project(...
Comment puis-je interroger une table d'alias à l'aide d'Arel?